web-dev-qa-db-fra.com

Changer la valeur du filtre dynamiquement pour une source de données de kendo?

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!

9
Naner

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/

11
OnaBai

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);
7
Ranga Reddy

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;
            };
0
user5292841