J'aimerais pouvoir mettre à jour la valeur du filtre de manière dynamique via une fonction:
filter: [{
"field": "id_person",
"operator": "eq",
"value": GetIdPerson()
}]
Et la fonction:
function GetIdPerson() {
try{
if (viewModel.get("SelectedMember").id_person > 0) {
return viewModel.get("SelectedMember").id_person;
}
} catch(ex) { }
return 0;
}
Mais la fonction n'est pas appelée lorsque j'appelle datasource.read ().
Y a-t-il une meilleure façon d'accomplir cela?
Ou si c'est la meilleure façon, qu'est-ce que je fais mal?
Merci!
Il existe une fonction intégrée pour configurer (mettre à jour) le filtre dans une source de données, vérifiez this . Donc en fait, je ne sais pas pourquoi vous avez besoin de cette fonction. Ce serait plus facile de faire:
try{
if (viewModel.get("SelectedMember").id_person > 0) {
datasource.filter({
"field": "id_person",
"operator": "eq",
"value": viewModel.get("SelectedMember").id_person
});
}
} catch(ex) { }
Je veux dire, définir/appliquer un nouveau filtre pour la datasource
originale, laquelle condition est celle que vous voulez.
MAISbien sûr rien ne vous empêche d’utiliser une fonction pour obtenir la valeur réelle d’un filtre et vous pouvez faire:
function GetIdPerson() {
try{
if (viewModel.get("SelectedMember").id_person > 0) {
return viewModel.get("SelectedMember").id_person;
}
} catch(ex) { }
return 0;
}
var datasource = new kendo.data.DataSource({
...
schema : {
model : {
fields: {
...
}
}
},
filter: {
"field": "id_person",
"operator": "eq",
"value": GetIdPerson()
}
});
et/ou
datasource.filter({
"field": "id_person",
"operator": "eq",
"value": GetIdPerson()
});
Un exemple ici: http://jsfiddle.net/OnaBai/9gnsj/
Si vous souhaitez filtrer en fonction d'une valeur supérieure à la valeur du champ, vous pouvez utiliser l'opérateur 'et' l'opérateur d'une autre manière 'ou'.
Maintenant, je crée un filtre dynamique.
var filter = { logic: "and", filters: [] };
for(var index=0; index < totalPages; index++){
filter.filters.Push({field: "name", operator: "eq", value: dynamic value here });
}
dataSource.filter(filter);
Cela a fonctionné pour moi. Non documenté nulle part, mais a vu le filtre et trier les objets dans l'objet gridOptions.dataSource, et hop tout a fonctionné.
$http.get(templateUrl).success(function(result) {
gridOptions.columns = result.columns;
if (result.filter) {
gridOptions.dataSource._filter = result.filter;
gridOptions.dataSource._sort = result.sort;
};