![](/img/trans.png)
[英]How to manually add an item into datasource in Kendo UI Combobox
[英]Add an “All” item to kendo ui listview populated by a remote datasource
我正在使用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" }
}
});
我嘗試了幾種不同的方法來實現這一目標:
根據我的閱讀,我認為我應該能夠在listview的dataBound事件中進行操作,並且我的實現不正確。 這是添加了dataBound事件的listview,它使我的瀏覽器(Firefox)崩潰-或向listview(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({});
}
}
});
任何幫助將不勝感激。
為什么不在服務器端添加它? 無論如何,如果要在dataBound
執行此dataBound
,只需檢查它是否存在,如果不存在則僅添加:
dataBound: function (e) {
var dsource = this.dataSource;
if (dsource.at(0).FilterName !== "All") {
dsource.insert(0, {
FilterId: 0,
FilterName: "All"
});
}
},
作為對該問題的解釋,您正在創建一個無限循環,因為在數據源中插入元素將觸發change事件,並且列表視圖將再次刷新並綁定(從而觸發dataBound
)。
您也可以將其封裝在自定義小部件中:
(function ($, kendo) {
var ui = kendo.ui,
ListView = ui.ListView;
var CustomListView = ListView.extend({
init: function (element, options) {
// base call to widget initialization
ListView.fn.init.call(this, element, options);
this.dataSource.insert(0, {
FilterId: 0,
FilterName: "All"
});
},
options: {
name: "CustomListView"
}
});
ui.plugin(CustomListView);
})(window.jQuery, window.kendo);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.