KendoUI:将视图模型绑定到数据源更改

Posted

技术标签:

【中文标题】KendoUI:将视图模型绑定到数据源更改【英文标题】:KendoUI: binding view model to datasource change 【发布时间】:2012-11-28 22:05:54 【问题描述】:

我有一个可观察对象,它定义了一个指向绑定到网格的数据源的指针,以及一个应该返回我在数据源中声明的聚合值的自定义字段。

我想将第二个字段(“totAmount”)绑定到自定义 html 元素。

我不明白如何更新它的值:当我调用数据源的“read()”方法时,绑定的值不应该也在接口上更新吗?它仅适用于“原始”模型字段吗?

=== javascript ===
var vm = kendo.observable(
    gridDatasource: new kendo.data.DataSource( ... ),

    totAmount: function() 
        var ds = this.get("gridDatasource");
        var value = (ds.aggregates()) ? ds.aggregates().totAmount : 0;
        return value;
    
);

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

【问题讨论】:

【参考方案1】:

我之前的回答并不完全正确:它将模型更新绑定到网格更改(在每一行选择上)。最好将其绑定到数据源的“更改”事件:

=== JAVASCRIPT ===
var vm = kendo.observable(
    gridDatasource: new kendo.data.DataSource( ... ),
    totAmount: 0
);

vm.gridDatasource.bind("change", function(e) 
    vm.set("totAmount", this.aggregates().totAmount);
);


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

【讨论】:

【参考方案2】:

到目前为止,我找到了一个类似于我之前的帖子(bind HTML elements to grid selected row/dataItem)的解决方案,在绑定到数据源的网格的“更改”事件中设置值:

=== JAVASCRIPT ===
var vm = kendo.observable(
    gridDatasource: new kendo.data.DataSource( ... ),
    totAmount: 0
);

$("#grid").kendoGrid(
    change: function(e) 
        vm.set("totAmount", this.dataSource.aggregates().totAmount);
    
);


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

【讨论】:

以上是关于KendoUI:将视图模型绑定到数据源更改的主要内容,如果未能解决你的问题,请参考以下文章

来自 JSON 的 WebAPI 模型绑定

从数据模板内部绑定到视图模型

MVVM 架构与数据绑定库

使用合金加速器将模型绑定到控制器视图

将现有 DOM 元素绑定到视图模型

将 [VisualStateManager] 视图状态绑定到 MVVM 视图模型?