web-dev-qa-db-fra.com

Filtrage personnalisé des données avec le côté serveur

J'utilise datatables (datatables.net) et j'utilise également le traitement côté serveur (Django).

J'ai un champ de texte séparé dans lequel je l'utilise pour personnaliser le filtrage des données dans le DataTable après le rendu du tableau.

Ce qui suit fonctionne très bien:

Je veux personnaliser les colonnes 

    var table = $('#problem_history').DataTable( {
        "bJQueryUI": true,
        "aaSorting": [[ 1, "desc" ]],
        "aoColumns": [
          // various columns here
        ],
        "processing": true,
        "serverSide": true,
        "ajax": {
          "url": "/getdata",
          "data": {
                 "friend_name": 'Robert'
          }
        }  
  } );

Donc, lors du chargement de la page (chargement initial du datatable), cela filtre parfaitement pour 'Robert'. Mais maintenant, je veux modifier par programme les données à filtrer pour "nom_ami" == "Sara"

J'ai déjà essayé ce qui suit, le filterData a un objet filtré correct mais la table elle-même ne se redessine pas avec le nouveau filtre.

var filteredData = table.column( 4 ).data().filter(
        function ( value, index ) {
            return value == 'Sara' ? true : false;
        });
table.draw();

J'ai aussi essayé cela mais pas de chance.

filteredData.draw();

Comment puis-je atteindre cet objectif?

Merci de votre aide.

7
Amir Mog

Voici une très belle explication sur la façon de le faire: https://datatables.net/reference/option/ajax.data

J'utilise actuellement ce code:

"ajax": {"url":"/someURL/Backend",
        "data": function ( d ) {
                  return $.extend( {}, d, {
                    "parameterName": $('#fieldIDName').val(),
                    "parameterName2": $('#fieldIDName2').val()
                  } );
        }
}

Vous l'appelez en procédant comme suit:

$('#myselectid').change(function (e) {
        table.draw();
});

Si vous souhaitez soumettre en cliquant sur le bouton, changez le .change en .click et assurez-vous que l'ID pointe vers l'identifiant du bouton dans un code HTML.

6
Damir Olejar

Vous l'avez presque. Vous devez simplement affecter la variable de filtre à Le paramètre de données transmis dans la requête datatables:

"ajax": {
     "url": "/getdata",
     "data": {
     "friend_name": $('#myselectid').val();
    }
} 

Et pour filtrer les données, il suffit d'appeler draw() à l'événement select change

$('#myselectid').change(function (e) {
        table.fnDraw();
});
1
markpsmith