Jquery 从剑道网格中移除绑定到击倒嵌套可观察项的项目

Jquery 从剑道网格中移除绑定到击倒嵌套可观察项的项目,jquery,knockout.js,kendo-grid,knockout-kendo,Jquery,Knockout.js,Kendo Grid,Knockout Kendo,我有一个剑道网和击倒组合。 我的网格源来自嵌套的可观察数组。网格的最后一列包含删除该行的按钮。我怎样才能做删除 你的小提琴拉得很近。您不希望在foreach循环中添加id,因为它复制了id。一个选项是在父对象(具有foreach的对象)上添加id,并连接一个处理程序,如: $("#selectedServices").on("click", ".btnRemove", function (e) { var $current = $(e.currentTarget), w

我有一个剑道网和击倒组合。 我的网格源来自嵌套的可观察数组。网格的最后一列包含删除该行的按钮。我怎样才能做删除


你的小提琴拉得很近。您不希望在
foreach
循环中添加
id
,因为它复制了id。一个选项是在父对象(具有
foreach
的对象)上添加id,并连接一个处理程序,如:

$("#selectedServices").on("click", ".btnRemove", function (e) {
    var $current = $(e.currentTarget),
        widget = $current.closest(".k-grid").data("kendoGrid"),
        dataItem = widget && widget.dataItem($current.closest("tr")),
        item = ko.dataFor($current[0]);

    if (item, dataItem && dataItem.id) {
        vm.removeSample(item, dataItem.id);
    }
});
因此,我们通过查看单击元素的祖先来获取网格实例,然后通过查看单击元素所在的行来标识dataItem,最后使用id来删除该项


这里的工作小提琴:

对调用
removeSample
做了一点小小的调整,并调整了以前是
removietem
的逻辑。非常感谢@RPNiemeyer
$("#selectedServices").on("click", ".btnRemove", function (e) {
    var $current = $(e.currentTarget),
        widget = $current.closest(".k-grid").data("kendoGrid"),
        dataItem = widget && widget.dataItem($current.closest("tr")),
        item = ko.dataFor($current[0]);

    if (item, dataItem && dataItem.id) {
        vm.removeSample(item, dataItem.id);
    }
});