1

我正在尝试在 Kendo Grid 中创建 2 向绑定。当在 Kendo Grid 中使用编辑功能并在视图模型上具有 Computed Observables 时,必须有 2 路绑定。我能找到的唯一解决方案是:

具有批量编辑功能的 Knockout-Kendo Grid 不会更新视图模型

在此示例中,基于上述解决方案使用 KO.computed 字段创建了 feedle

带有 ko.computed 字段的剑道网格

,编辑的数据不会更新视图模型,直到我们点击同步按钮。如何立即更新?

这是我的解决方案:

var grid = $("#grid").data("kendoGrid");
grid.bind("save", grid_save);
grid_save = function (e) {
        if (e.values.first) { // Check if the first name changed
           if (e.values.first != e.model.first) {// Compare with previous value
                var people = self.people() || []; // Navigate through KO view model
                $.each(people, function () {
                    if (this.first() == e.model.first) {
                        this.first(e.values.first); // Update KO View Model
                    }
                });
            }
        }

这是 Kendo 网格的小提琴与 Ko.computed 立即刷新

我正在尝试使用网格的保存事件立即更新我的视图模型。这意味着此事件将在每次单元格更改时触发。看起来有点丑。还有其他优雅的解决方案吗?

4

1 回答 1

0

我已经用以下内容更新了你的小提琴。您可以只更新更改的行,而不是遍历所有数据。

http://jsfiddle.net/Kunfc/6/

var getWidget = function (elem){
    return $(elem).data('kendoGrid');
};

var updateModel = function (model, modelChanges){
    for (prop in modelChanges) {
        model[prop](modelChanges[prop]);
    }
};

     this.grid_save = function (e) {
            var grid = $("#grid");
            var widget = getWidget(grid.get(0));
            var gridData = widget.dataSource.data();

            var row = $(e.container).closest("tr");
            var rowIdx = grid.find("tr").index(row);
            var colIdx = widget.cellIndex(e.container);//$("td", row).index(this);

            var idx = gridData.indexOf(e.model);

            var model = self.people()[idx];
            updateModel(model, e.values);
        };

希望这可以帮助

于 2013-12-13T10:43:24.973 回答