【发布时间】:2014-04-30 17:04:12
【问题描述】:
我正在使用 MVC 4、Web API 和 Kendo UI 控件构建网站。
在我的页面上,我使用 Kendo UI Listview 来过滤我的网格。我正在尝试将“ALL”选项添加为列表视图中的第一项。
这是列表视图:
var jobsfilter = $("#jobfilter").kendoListView({
selectable: "single",
loadOnDemand: false,
template: "<div class='pointercursor' id=${FilterId}>${FilterName}</div>",
dataSource: filterDataSource,
change: function (e) {
var itm = this.select().index(), dataItem = this.dataSource.view()[itm];
if (dataItem.FilterId !== 0) {
var $filter = new Array();
$filter.push({ field: "JobStatusId", operator: "eq", value: dataItem.FilterId });
jgrid.dataSource.filter($filter);
} else {
jgrid.dataSource.filter({});
}
}
});
这是我的数据源:
var filterDataSource = new kendo.data.DataSource({
transport: {
read: {
url: "api/Filter"
}
},
schema: {
model: { id: "FilterId" }
}
});
我尝试了几种不同的方法来实现这一点:
- 如果我将它附加到一个按钮上,我可以让它工作 - 但我需要它在那里 当数据加载。
- 如果我将它添加到列表视图的 dataBound 事件中,它会导致 数据绑定事件进入循环并将项目添加到一堆(IE)或杀死浏览器(firefox)。添加 preventDefault 什么也没做。
- 我已经阅读了向 Read 参数添加函数的内容 数据源,但我认为这根本不是正确的地方 它。
根据我的阅读,我认为我应该能够在 listview 的 dataBound 事件中做到这一点,并且我的实现不正确。这是添加了 dataBound 事件的列表视图,它使我的浏览器 (Firefox) 崩溃 - 或向列表视图 (IE) 添加了大约 50 个“全部”项目。
var jobsfilter = $("#jobfilter").kendoListView({
selectable: "single",
loadOnDemand: false,
template: "<div class='pointercursor' id=${FilterId}>${FilterName}</div>",
dataSource: {
transport: {
read: {
url: "api/Filter"
}
}
},
dataBound: function (e) {
var dsource = $("#jobfilter").data("kendoListView").dataSource;
dsource.insert(0, { FilterId: 0, FilterName: "All" });
e.preventDefault();
},
change: function (e) {
var itm = this.select().index(), dataItem = this.dataSource.view()[itm];
if (dataItem.FilterId !== 0) {
var $filter = new Array();
$filter.push({ field: "JobStatusId", operator: "eq", value: dataItem.FilterId });
jgrid.dataSource.filter($filter);
} else {
jgrid.dataSource.filter({});
}
}
});
任何帮助将不胜感激。
【问题讨论】:
标签: javascript kendo-ui kendo-datasource kendo-listview