2012-12-15 16 views
5

dataSource.changedイベントは機能していますか?私の剣道UIグリッドがインスタンス化された後剣道UIデータソース変更イベント:それは機能していますか?

、私はここにドキュメントごとの変更イベントを結合しています:

// 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:

http://docs.kendoui.com/api/framework/datasource#change

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

が、私はこれをやっています()関数は、これらのいずれかを行うと呼び出されません。

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

または

grid.dataSource.data = aDifferentArray; 

私は「変更」イベントがために待機している正確に何かわかりません。正確には、それを引き起こすのは何ですか?

完全に新しいdataSourceを作成し、すでにdataSourceを持つグリッドに割り当てると、既存のデータソースの変更されたイベントがどのようにトリガーされるのかわかりません。そのようなイベント(dataSourceが別のものに置き換えられたことに気付くグリッド)は、グリッドレベルのイベントであり、dataSourceレベルのイベントではありません。

答えて

8

重要なことは、DataSourceのデータがObservableArrayであり、その配列のデータ項目がObservableObjectに変換されていることです。

  1. データObservableArray変更(レコードが挿入され、削除された)データソースの

    changeイベントは2つの条件下で焼成されます。これの例は、DataSource.add()またはDataSource.remove()関数を使用することです。

  2. アレイのObservableDataオブジェクトの1つからプロパティが変更されたイベントがDataSourceにバブルアップした場合。しかし、他のKendo MVVMフレームワークと同様に、プロパティが変更されたという通知は、.set("propertyName", value)関数が呼び出されたときにのみ発生します。

grid.dataSource.data()[1]["deptname"] = 'XXX';が変更イベントをトリガされていないのはこのためです。それを変更する場合:grid.dataSource.data()[1].set("deptname", 'XXX');それは動作するはずです。基本的には、dataオブザーバブルオブジェクトから起動されたMVVMプロパティの変更に応答して、changeイベントが発生したと考えてください。

データアレイを変更する場合は、grid.dataSource.data = aDifferentArray;変更がトリガーされるかどうかは実際はわかりません。私はそれを試みたことはありません。

+0

ご清聴ありがとうございます。 '.set'メソッドはchangeイベントをトリガーしますが、' grid.dataSource.data = aDifferentArray'は私が知る限りは変化しません。 WinFormsグリッドのDataSource_Changedイベントに相当する剣道グリッドが存在することを願っています.60秒ごとに新しいデータでグリッドをリフレッシュすることを望んでいるため、グリッドに別のデータソースが割り当てられているときに発生します:http://stackoverflow.com/新しいデータ・データ・ソースを持つ60秒ごとのデータ・ソース/ a/13892541#comment19140263_13892541 – Tim

+2

実際には、データをスワップするために、 .data() '関数:http://docs.kendoui。com/api/framework/datasource#data。あなたのコードは 'grid.dataSource.data(aDifferentArray);' – CodingWithSpike

+0

となるでしょう!どうもありがとう。 – Tim