6

dataSource.changed 事件是否有效?

实例化我的 Kendo UI 网格后,我将按照此处的文档绑定更改事件:

http://docs.kendoui.c​​om/api/framework/datasource#change

//To set after initialization
dataSource.bind("change", function(e) {
    // handle event
});

我正在这样做:

// initialize
$("#grid").kendoGrid({
        dataSource: dataSource, 

        blah blah blah
)

});
// end of initialization



// bind afterwards
 var grid = $('#grid').data('kendoGrid');
  grid.dataSource.bind("change", function (e) {
      dataChanged();
  });


 //also tried a setTimeout:

  // bind afterwards
  setTimeout(function () {
    var grid = $('#grid').data('kendoGrid');
    grid.dataSource.bind("change", function (e) {
        dataChanged();
    });
}, 350);



 function dataChanged() {
   // handle "change" whatever that means -- documentation definition is hazy
   // does reassigning the data array constitute a change?
   // does changing the value of a particular item in the data array
   // constitute a change?
   // does removing an item from the data array constitute a change?

    var grid = $("#grid").data("kendoGrid");
    grid.refresh();
 }

但是当我执行以下任一操作时,不会调用我的 dataChanged() 函数:

var grid = $('#grid').data('kendoGrid');
grid.dataSource.data()[1]["deptname"] = 'XXX';

或者

grid.dataSource.data = aDifferentArray;

我不确定“更改”事件到底在听什么。究竟是什么应该触发它?

如果我创建一个全新的数据源,并将其分配给已有数据源的网格,我看不出这将如何触发现有数据源的更改事件。这样的事件(网格注意到其 dataSource 已被替换为不同的事件)将是网格级事件,而不是数据源级事件,对吗?

4

1 回答 1

9

需要注意的重要一点是,支持 的数据DataSourceObservableArray,并且该数组中的数据项被转换为ObservableObjects。

数据源的change事件在 2 个条件下触发:

  1. 数据ObservableArray更改(插入、删除记录)。一个例子是使用DataSource.add()orDataSource.remove()函数。

  2. ObservableData如果属性更改事件从数组中的一个对象冒泡到 DataSource 。但是,就像 Kendo MVVM 框架的其余部分一样,属性更改的通知仅在.set("propertyName", value)调用其函数时发生。

这就是为什么grid.dataSource.data()[1]["deptname"] = 'XXX';不触发更改事件的原因。如果您将其更改为:grid.dataSource.data()[1].set("deptname", 'XXX');那么它应该开始工作。基本上,将事件视为响应从可观察对象change触发的 MVVM 属性更改而触发的事件。data

至于更改数据数组grid.dataSource.data = aDifferentArray;,我实际上不确定这是否会或应该触发更改。我从来没有尝试过。

于 2012-12-15T15:49:32.417 回答