如果您沒有使用行模板,那麼以這種方式綁定並不是無縫的。有一些非常簡單的方法,您可以處理單元格中按鈕的點擊,查找與該行相關聯的數據項,然後查找視圖模型項目。
例如,你可以綁定你列,如:
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/
如果你想保持你的視圖模型代碼更清晰(避免引用事件/元素),那麼你可以附加一個處理程序來定位t他的項目,然後調用視圖模型。這將是我的首選。
喜歡的東西:
columns: [
{ field: "id", title: "id"},
{ field: "name", title: "name"},
{ command:[{text: "x", className: "btnRemove" }]}
]
然後,unobstrusively附加處理程序,如按鈕:
$("#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);
}
});
然後在你的虛擬機removeItem
方法將只是採取在ID,如:
this.removeItem = function(id) {
self.items.remove(function(item) {
return item.id === id;
});
};
http://jsfiddle.net/rniemeyer/AwX5N/
'kendoGrid'自定義綁定可能無法正常工作/編碼。在你的jsFiddle代碼中,傳遞給你的removeItem方法的「item」是ViewModel對象。我也嘗試了$ parent,$ root和$ data。它們要麼未定義,要麼指向ViewModel。我不認爲kendoGrid正確地設置了綁定內容(但是這是從沒有寫過自定義綁定器的人,也沒有看過kendoGrid綁定器......) – PatrickSteele 2013-04-05 19:16:53