为kendo数据源动态更改过滤器值?

时间:2013-03-18 22:23:53

标签: jquery filter grid kendo-ui datasource

我希望能够通过函数动态更新过滤器值:

filter: [{
            "field": "id_person",
            "operator": "eq",
            "value": GetIdPerson()
       }]

功能:

function GetIdPerson() {
     try{
         if (viewModel.get("SelectedMember").id_person > 0) {
            return viewModel.get("SelectedMember").id_person;
         }
     } catch(ex) { }
     return 0;
 }

但是当我调用datasource.read()时,函数没有被调用。

有没有更好的方法来实现这一目标?

或者如果这是最好的方式,我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:11)

有一个用于在DataSource中设置(更新)过滤器的内置函数,请检查this。所以实际上我不知道为什么你需要这个功能。做起来会更容易:

try{
    if (viewModel.get("SelectedMember").id_person > 0) {
        datasource.filter({
           "field": "id_person",
           "operator": "eq",
           "value": viewModel.get("SelectedMember").id_person
        });
    }
} catch(ex) { }

我的意思是,为原始datasource定义/应用新的过滤器,哪个条件是您想要的条件。

但是当然没有什么能阻止你使用函数来获取过滤器的实际值,你可以这样做:

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

和/或

datasource.filter({
    "field":    "id_person",
    "operator": "eq",
    "value":    GetIdPerson()
});

此处的示例:http://jsfiddle.net/OnaBai/9gnsj/

答案 1 :(得分:7)

如果您想基于超过字段值进行过滤,可以使用'和'运算符,否则使用'或'运算符。

现在我正在创建一个动态过滤器。

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

答案 2 :(得分:0)

这对我有用。没有在任何地方记录,但在gridOptions.dataSource对象中看到了_filter和_sort对象,并且嘿它已经工作了。

        $http.get(templateUrl).success(function(result) {
            gridOptions.columns = result.columns;
            if (result.filter) {
                gridOptions.dataSource._filter = result.filter;
                gridOptions.dataSource._sort = result.sort;
            };