Kendo UI数据源已更改事件:正常吗?

Kendo UI dataSource changed event: is it working?

dataSource.changed事件是否正常工作?

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

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

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

我正在这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 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()函数:

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

1
grid.dataSource.data = aDifferentArray;

我不确定'changed'事件到底在听什么。究竟应该触发什么?

如果我创建一个全新的dataSource,并将其分配给已经具有dataSource的网格,我看不到它将如何触发现有数据源的change事件。这样的事件(网格通知其dataSource已被另一个事件替代)将是网格级别的事件,而不是dataSource级别的事件,对吗?


要注意的重要一点是,支持DataSource的数据是ObservableArray,并且该数组中的数据项将转换为ObservableObject s。

数据源的change事件在以下两种情况下触发:

  • 数据ObservableArray更改(插入,删除记录)。例如,使用DataSource.add()DataSource.remove()函数。

  • 如果属性更改,则事件会从数组中的ObservableData对象之一上升到DataSource。但是,就像Kendo MVVM框架的其余部分一样,仅当调用其.set("propertyName", value)函数时,才会发生属性更改的通知。

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

    关于更改数据数组grid.dataSource.data = aDifferentArray;我实际上不确定是否会触发更改。我从未尝试过。