jquery kendo 网格过滤器 属性 未定义
jquery kendo grid filter property is undefined
我有一个 jquery 函数,它应该根据被单击按钮的服务类型值过滤数据源。
我在 telerik 上使用这个 post 来获得我的指导:
Adding filters to Grid's source
据此,我创建了这个 buttonFilter()
函数:
function buttonFilter() {
var buttonText = 'All';
var button = $('#ReadTypeBtnGroup > button.btn.btn-default.active');
if (button != null) {
buttonText = button.val();
}
console.log('buttonFilter:: buttonText: ' + buttonText);
var dataSource = $('#grid').data('kendoGrid').dataSource;
if (dataSource.filter() != undefined) {
dataSource.filter().length = 0; // remove any existing filters
}
if (buttonText != 'All') {
dataSource.filter().push({ field: "serviceType", operator: 'eq', value: buttonText });
}
return buttonText;
}
我得到的错误是:
Uncaught TypeError: Cannot read property 'push' of undefined
filter()
属性 应该是个数组,但我不是很擅长 javascript 或者 jquery.
我做错了什么?
你搞错了。您不能更改过滤器属性以更改 filter()
方法的结果。相反,您必须使用它来传递参数。该方法只有 returns 个只读值。
示例:
var filters = dataSource.filter(); // Getting current filters
dataSource.filter(null); // Clearing filters
dataSource.filter({ field: "abc", value: "1" }); // Setting new filters
@Dontvotemedown 基本上是正确的,并且该答案对于您特别想做的事情非常有效(即完全清除过滤器并应用您自己的过滤器)。但是,如果您想手动将过滤器添加到现有过滤器,您的原始路径接近正确。我在最初的搜索中找到了 ,然后在我无法添加到未定义的过滤器时找到了这个。我添加过滤器的完整解决方案,可以添加到未定义的过滤器集,也可以与现有过滤器一起添加:
var grid = $("#ActivityGrid").data("kendoGrid");
var dataSource = grid.dataSource;
var gridFilter = dataSource.filter();
var upcomingFilter = {
field: "ActivityDate",
operator: "gte",
value: new Date(),
FilterName: "UpcomingOnly"
};
if ($("#UpcomingOnlyCheckbox")[0].checked) {
if (gridFilter == undefined) {
dataSource.filter(upcomingFilter);
}
else {
gridFilter.filters.push(upcomingFilter);
dataSource.filter(gridFilter);
}
}
我有一个 jquery 函数,它应该根据被单击按钮的服务类型值过滤数据源。
我在 telerik 上使用这个 post 来获得我的指导:
Adding filters to Grid's source
据此,我创建了这个 buttonFilter()
函数:
function buttonFilter() {
var buttonText = 'All';
var button = $('#ReadTypeBtnGroup > button.btn.btn-default.active');
if (button != null) {
buttonText = button.val();
}
console.log('buttonFilter:: buttonText: ' + buttonText);
var dataSource = $('#grid').data('kendoGrid').dataSource;
if (dataSource.filter() != undefined) {
dataSource.filter().length = 0; // remove any existing filters
}
if (buttonText != 'All') {
dataSource.filter().push({ field: "serviceType", operator: 'eq', value: buttonText });
}
return buttonText;
}
我得到的错误是:
Uncaught TypeError: Cannot read property 'push' of undefined
filter()
属性 应该是个数组,但我不是很擅长 javascript 或者 jquery.
我做错了什么?
你搞错了。您不能更改过滤器属性以更改 filter()
方法的结果。相反,您必须使用它来传递参数。该方法只有 returns 个只读值。
示例:
var filters = dataSource.filter(); // Getting current filters
dataSource.filter(null); // Clearing filters
dataSource.filter({ field: "abc", value: "1" }); // Setting new filters
@Dontvotemedown 基本上是正确的,并且该答案对于您特别想做的事情非常有效(即完全清除过滤器并应用您自己的过滤器)。但是,如果您想手动将过滤器添加到现有过滤器,您的原始路径接近正确。我在最初的搜索中找到了
var grid = $("#ActivityGrid").data("kendoGrid");
var dataSource = grid.dataSource;
var gridFilter = dataSource.filter();
var upcomingFilter = {
field: "ActivityDate",
operator: "gte",
value: new Date(),
FilterName: "UpcomingOnly"
};
if ($("#UpcomingOnlyCheckbox")[0].checked) {
if (gridFilter == undefined) {
dataSource.filter(upcomingFilter);
}
else {
gridFilter.filters.push(upcomingFilter);
dataSource.filter(gridFilter);
}
}