为剑道数据源动态更改过滤器值?
Posted
技术标签:
【中文标题】为剑道数据源动态更改过滤器值?【英文标题】:Change filter value dynamically for a kendo datasource? 【发布时间】:2013-03-07 10:54:52 【问题描述】:我希望能够通过函数动态更新过滤器值:
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() 时该函数没有被调用。
有没有更好的方法来做到这一点?
或者如果这是最好的方法,我做错了什么?
谢谢!
【问题讨论】:
【参考方案1】: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/
【讨论】:
谢谢#OnaBai,效果很好!但我认为这引起了问题。一旦我重写了过滤器: $("#GridAddress").data("kendoGrid").dataSource.filter( "field": "id_person", "operator": "eq", "value": GetIdPerson() ) 网格工具栏上的 CREATE 按钮停止工作。知道为什么吗? 找到了。我错过了 serverFiltering: true。再次感谢。【参考方案2】:如果您想根据超过字段值进行过滤,您可以使用“和”运算符,否则使用“或”运算符。
现在我正在创建一个动态过滤器。
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);
【讨论】:
【参考方案3】:这对我有用。没有在任何地方记录,但在 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;
;
【讨论】:
"columns": [ "field": "fieldOne", "title": "field One", "width": "200px" , "field": "fieldTwo", "title": "field 两个数值右对齐", "width": "200px", "attributes": "style": "text-align:right;" , "格式": "0:0.00" , ], "过滤器": [ "field": "fieldTwo", "operator": "gt", "value": 100 , "field" : "fieldOne", "operator": "eq" , "value": null ], "sort": [ "field": "fieldTwo", "dir": "desc" ] 以上是要使用的 json 文件(使用 templateUrl '/app/example/view1.json' 指向它。以上是关于为剑道数据源动态更改过滤器值?的主要内容,如果未能解决你的问题,请参考以下文章