kendo将HTML元素绑定到网格选定的row / dataItem

时间:2012-12-10 13:37:37

标签: mvvm kendo-ui

我有以下情况(使用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模型绑定解决方案实现相同的目标?

2 个答案:

答案 0 :(得分: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>

有更好的方法吗?

答案 1 :(得分: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>

它应该稍微紧凑。