我有一个剑道网络网格与淘汰赛相结合。网格的最后一列包含一个用于删除该行的按钮。但是removeItem方法的参数
this.removeItem = function (item) {
this.FilteredClients.remove(item);
}.bind(this);
得到错误的值。
看看http://jsfiddle.net/zeQMT/93/
少了什么东西?
顺便提一句。我不想使用行模板,因为我想自己设置列标题。
我有一个剑道网络网格与淘汰赛相结合。网格的最后一列包含一个用于删除该行的按钮。但是removeItem方法的参数
this.removeItem = function (item) {
this.FilteredClients.remove(item);
}.bind(this);
得到错误的值。
看看http://jsfiddle.net/zeQMT/93/
少了什么东西?
顺便提一句。我不想使用行模板,因为我想自己设置列标题。
如果您不使用行模板,则以这种方式绑定不是无缝的。尽管您可以处理单击单元格中的按钮,找到与该行关联的数据项,然后找到视图模型项,但有几种非常简单的方法。
例如,您可以像这样绑定列:
columns: [
{ field: "id", title: "id"},
{ field: "name", title: "name"},
{ command:[{text: "x", click: removeItem}]}
]
然后,您的removeItem
函数需要找到适当的视图模型项,例如:
this.removeItem = function(e) {
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
if (dataItem && dataItem.id) {
self.items.remove(function(item) {
return item.id === dataItem.id;
});
}
};
示例:http: //jsfiddle.net/rniemeyer/EpkPy/
如果您想保持视图模型代码更简洁(避免在其中引用事件/元素),那么您可以附加一个处理程序来定位项目,然后调用视图模型。这将是我的偏好。
就像是:
columns: [
{ field: "id", title: "id"},
{ field: "name", title: "name"},
{ command:[{text: "x", className: "btnRemove" }]}
]
然后,将一个处理程序不显眼地附加到按钮上,例如:
$("#myGrid").on("click", ".btnRemove", function(e) {
var widget = $("#selectedServices").data("kendoGrid");
var dataItem = widget.dataItem($(e.currentTarget).closest("tr"));
if (dataItem && dataItem.id) {
vm.removeItem(dataItem.id);
}
});
然后,您的 vm 上的removeItem
方法将只接受 id,例如:
this.removeItem = function(id) {
self.items.remove(function(item) {
return item.id === id;
});
};