2013-03-18 72 views
8

我希望能够通过函数动态更新过滤值:为kendo数据源动态更改过滤器值?

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( )。

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

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

谢谢!

回答

9

在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/

+0

谢谢#OnaBai,它工作的很棒!但我认为它造成了一个问题。一旦我重写过滤器:$(“#GridAddress”)。data(“kendoGrid”)。dataSource.filter({“0” () })网格工具栏上的CREATE按钮停止工作。任何想法为什么? – Naner 2013-03-19 14:06:47

+1

找到了。我缺少serverFiltering:true。再次感谢。 – Naner 2013-03-19 14:56:11

6

如果您想要基于超过字段值进行过滤,您可以使用'和'运算符,其他明智使用'或'操作符要么。

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

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); 
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; 
      }; 
+0

{ “列”:[ { “字段”: “fieldOne”, “标题”: “字段中的一个”, “宽度”: “200像素” }, { “字段”: “fieldTwo” , “title”:“field two numeric right aligned”, “width”:“200px”, “attributes”:{“style”:“text-align:right;” }, “format”:“{0:0。00“} }, ], ”filter“:[”field“:”fieldTwo“,”operator“:”gt“,”value“:100}, {”field“:”fieldOne“, “运算符”: “当量”, “值”:空} ], “排序”:[ { “字段”: “fieldTwo”, “DIR”: “降序”} ] } – 2016-03-09 12:41:14

+0

上面是一个JSON要使用的文件(使用templateUrl'/app/example/view1.json'指向它。 – 2016-03-09 12:42:04