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 を作成し、それを dataSource が既にあるグリッドに割り当てると、それが既存のデータ ソースの変更イベントをトリガーする方法がわかりません。そのようなイベント (dataSource が別のものに置き換えられたことにグリッドが気付く) は、dataSource レベルのイベントではなく、グリッド レベルのイベントですよね?

4

1 に答える 1

9

注意すべき重要な点は、を裏付けるデータがでDataSourceありObservableArray、その配列内のデータ項目がObservableObjectsに変換されることです。

データソースのchangeイベントは、次の2つの条件下で発生します。

  1. データObservableArrayが変更されます(レコードが挿入、削除されます)。この例は、DataSource.add()またはDataSource.remove()関数の使用です。

  2. プロパティが変更された場合、イベントObservableDataは配列内のオブジェクトの1つからデータソースまでバブルします。ただし、他の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 に答える