web-dev-qa-db-fra.com

Comment forcer Datatables à restituer ou à recharger des données statiques?

J'ai un Datatable qui utilise des données statiques à partir d'un fichier HTML.

En utilisant soit la fonction "columnDefs data", soit la fonction "columnDefs render", je peux effectuer certains ajustements de sortie - masquer certains des TD en fonction de leur contenu et de leur position sur la page affichée (sans modifier la source de données) .

Cependant, lorsqu'un utilisateur modifie le nombre de lignes affichées, je dois ensuite réinitialiser et refaire mes ajustements sur les données, car différentes cellules devront maintenant être masquées et les entrées précédemment masquées devront peut-être être à nouveau affichées.

Donc, ce que je veux faire, c’est dans l’événement "length.dt" (nombre de lignes d’affichage qui viennent d’être modifiées), appelez quelque chose qui oblige Datatable à restituer l’ensemble de la table ou à recharger l’ensemble. data (qui appellerait ainsi mes fonctions de rendu columnDefs ou columnDefs)

Est-ce possible? Ou est-ce que mon approche est défectueuse et je dois trouver un autre moyen?

6
Dave

Utilisez rows().invalidate() pour invalider les données de toutes les lignes et draw() pour redessiner la table.

Veuillez noter que 'data' dans rows().invalidate('data') est requis si vous utilisez une structure de données Javascript (avec les options data ou columns.render).

$('#your_table').DataTable()
   .rows().invalidate('data')
   .draw(false);
15
Gyrocode.com

Vous pouvez redessiner l'intégralité du DataTable sur l'événement length.dt.

$('#your_table').on('length.dt', function (){
     setTimeout(function() {
         //draw('page') redraws your DataTable and preserves the page where it was
         $('#your_table').DataTable().draw('page');
     }, 100);
});

Modifier

Ici, vous pouvez voir plus d’informations et d’autres paramètres à transmettre à la méthode draw: https://datatables.net/reference/api/draw%28%29

1
Khalav

Utilisez 'destroy': true.

$("#your_table").dataTable({
  'destroy': true
})
0
Vivekanand Panda