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.
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.
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();
});