3

我有以下情况(使用 KendoUI):

我有一个绑定到数据源的网格。当我在网格中选择一行时,我调用它的“更改”事件来获取选定的 dataItem e 通过其他 HTML 元素显示其值。

类似于以下内容:

$("grid-element").kendoGrid({
    change: setElements
});

function setElements() {
    var grid = $("#grid-element").data("kendoGrid");
    var selectedItem = grid.dataItem(grid.select());

    $("#span-field1").text(selectedItem.field1);
    $("#span-field2").text(selectedItem.field2);
    $("#span-field3").text(selectedItem.field3);
}

我的问题是:是否可以通过 MVVM 或更好的 KendoUI 模型绑定解决方案来实现相同的目标?

4

2 回答 2

5

到目前为止,我找到了以下解决方案:

=== JAVASCRIPT ===
var vm = kendo.observable({
    gridSelectedItem: null,

    _field1: function() { 
        return this.get("gridSelectedItem.field1"); 
    },
    _field2: function() { 
        return this.get("gridSelectedItem.field2"); 
    }
});

$("#grid-element").kendoGrid({
    change: function(e) {
        var selectedItem = this.dataItem(this.select());
        vm.set("gridSelectedItem", selectedItem);
    }
});


=== HTML ===
<span data-bind="text: _field1"></span>
<span data-bind="text: _field2"></span>

有没有更好的办法?

于 2012-12-10T16:37:09.877 回答
2

确实,你在正确的轨道上,

以下是我可以建议您尝试的方法:

=== JAVASCRIPT ===
var vm = kendo.observable({
    gridSelectedItem: null    
});

$("#grid-element").kendoGrid({
    change: function(e) {
        var selectedItem = this.dataItem(this.select());
        vm.set("gridSelectedItem", selectedItem);
    }
});


=== HTML ===
<span data-bind="text: gridSelectedItem.field1"></span>
<span data-bind="text: gridSelectedItem.field2"></span>

它应该稍微紧凑一些。

于 2012-12-10T23:00:13.173 回答