Kendo UI dataSource改变了事件:它有效吗?

Tim*_*Tim 5 grid events datasource kendo-ui

dataSource.changed事件是否有效?

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

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

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

我这样做:

// 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();
 }
Run Code Online (Sandbox Code Playgroud)

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

var grid = $('#grid').data('kendoGrid');
grid.dataSource.data()[1]["deptname"] = 'XXX';
Run Code Online (Sandbox Code Playgroud)

要么

grid.dataSource.data = aDifferentArray;
Run Code Online (Sandbox Code Playgroud)

我不确定'改变'事件到底在听什么.究竟应该触发它的是什么?

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

Cod*_*ike 8

需要注意的重要一点是,支持的数据DataSource是a ObservableArray,并且该数组中的数据项将转换为ObservableObjects.

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

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

  2. 如果属性更改了事件,则会从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;我实际上不确定是否会触发更改.我从来没有尝试过.

  • 实际上,要交换数据,我认为你使用`.data()`函数:http://docs.kendoui.c​​om/api/framework/datasource#data所以你的代码将是`grid.dataSource.data( aDifferentArray);` (2认同)