我正在尝试将过滤列设置为multi
,并将搜索运算符设置为contains
。不幸的是,过滤器会向equals
运算符发出请求。我的剑道版本是2015.3.930。我的列配置对象如下所示:
filterable: {
operator: "contains",
multi: true,
dataSource: {
transport: {
read: filterReadMethod
}
}
}
我想要的是一个包含chechbox并按contains
过滤的列过滤器(在网格中)。有什么建议吗?
我已经尝试过:
cell: {
showOperators: false,
operator: "contains"
},
并且
operators: {
string: {
contains: "Contains"
}
}
答案 0 :(得分:1)
Check out this example on the Kendo API reference。我认为你的代码需要像:
filterable: {
multi: true,
operators: {
string: {
contains: "Contains"
}
}
},
<强>更新强>
经过一些测试后,我会说没有。不,你不能同时使用multi和contains。看来,通过设置multi: true
,引擎盖下的Kendo会创建过滤器,并将运算符设置为eq
。数据源的change
事件实际上让您偷看,但即使手动设置该值也不起作用。
我在Kendo Dojo进行了测试。我最终得到的代码如下。通过查看Kendo datasource reference,您可以看到有一些方法可以访问正在使用的过滤器。
所以让我限定我的权威性#34; no&#34;通过说它是JavaScript,肯定有一个&#34; hacky&#34;解决这个问题的方法。
但是,如果这确实是您需要的功能,那么我建议您点击Telerik网站上的支持论坛。即使你不再拥有有效的合同,他们也很乐意回答简单的问题,虽然它会在他们到达之前的几天。
希望我有更好的答案。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Kendo UI Snippet</title>
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.common.min.css"/>
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.rtl.min.css"/>
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.silver.min.css"/>
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.mobile.all.min.css"/>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://kendo.cdn.telerik.com/2016.2.607/js/kendo.all.min.js"></script>
</head>
<body>
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [ {
field: "country",
filterable: {
multi:true,
search: true,
dataSource: [
{ country: "BG" },
{ country: "USA" }
]
},
} ],
filterable: true,
dataSource: {
data: [
{ country: "BG" },
{ country: "USA" },
{ country: "1BG3" },
{ country: "1USA4" }
],
/*filter: {
logic: "or",
filters: [
{ field: "country", operator: "contains", value: "BG" }
]
},*/
change: function(e) {
try{
//e.sender._filter.filters[0].operator = "contains";
this.filter().filters[0].operator = "contains";
var f = this.filter().filters[0].value;
console.log(f);
}catch(e1) {
console.log(e1);
}
}
}
});
</script>
</body>
</html>