Comment puis-je éviter les doublons sur un DataTable jQuery lors d’une navigation retour en présence de Turbolinks?

J’utilise jQuery DataTables dans un nouveau projet Rails 4.2. J’ai un grand nombre de résultats qui doivent être filtrés par groupe, projet et statut. Le choix du groupe filtre la sélection de projet, via un aller-retour dans l’application, et la sélection de projet filtre le tableau de la même manière. J’enregistre le groupe et le projet dans les variables de session afin que, lorsque l’utilisateur change de page, puis clique sur le lien principal pour revenir, il se souvienne de sa sélection et les ramène à l’endroit où ils se trouvaient. Tout cela fonctionne comme je le souhaite.

Le problème est que l’utilisation du bouton Précédent du navigateur pour revenir à la table à partir d’une page différente entraînera un wrapper en double (avec des liens de zone de recherche, de liste déroulante du nombre d’éléments et de pagination) autour du DataTable.

entrez la description de l'image ici

J’ai ajouté le joyau jqueryturbolinks.

J’ai essayé de jouer avec les auditeurs d’événements , mais je ne peux pas faire fonctionner ces idées.

J’ai essayé de rendre le corps de la page exempt de Turbolinks avec data-turbolinks=false .

J’ai essayé de changer l’événement que ma clé de script (s) a sur autre chose que $(document).ready() , comme page:load . Aucun d’entre eux ne l’empêche.

J’ai essayé de charger tous les scripts du DataTable exemptés de Turbolinks avec data-turbolinks-eval=false dans cette page spécifique (avec content_for :head ).

La seule chose qui empêche la duplication de l’encapsuleur, c’est de supprimer simplement l’appel visant à inclure entièrement le JS turbolinks dans les actifs. Et j’aurais déjà fait cela si je ne connaissais pas les personnes plus intelligentes que je ne le pense, cela devrait faire partie de l’application. Je ne sais pas quoi faire. Je cherche le moyen élégant de gérer cela.

Ma table fonctionne comme prévu avec les parameters suivants.

Pour datatable.js ou application.js .

 var dataTable = null document.addEventListener("turbolinks:before-cache", function() { if (dataTable !== null) { dataTable.destroy() dataTable = null } }) 

Pour voir.

  .. 

Références:

  • Turbolinks 5 et DataTables travaillent ensemble en harmonie
  • Le bouton Précédent du navigateur provoque la réévaluation de certains scripts