剣道グリッドに変更があるかどうかを確認するにはどうすればよいですか?dirty
物件があると聞きましたが、見つかりません。
6 に答える
グリッドの基礎となるデータソースで「hasChanges」メソッドを使用できます。
grid.dataSource.hasChanges();
$('#divGrid').data('kendoGrid').dataSource.hasChanges();
追加された行では、dirtyプロパティがtrueに設定されるため、行が更新されます。ただし、削除された行は別の場所(_destroyedコレクション)に保存されます。この関数をグリッドのデータソースに渡して、変更があるかどうかを確認します。
function doesDataSourceHaveChanges(ds)
{
var dirty = false;
$.each(ds._data, function ()
{
if (this.dirty == true)
{
dirty = true;
}
});
if (ds._destroyed.length > 0) dirty = true;
return dirty;
}
レコードをページング/ソート/グループ/フィルター/作成/読み取り/更新/削除する場所で発生するdataSourceの変更イベントを通知して使用できます。
ハンドラーをアタッチするには、次を使用します。
$('#YourGrid').data().kendoGrid.dataSource.bind('change',function(e){
//the event argument here will indicate what action just happned
console.log(e.action)// could be => "itemchange","add" or "remove" if you made any changes to the items
})
更新:ユーザーがいずれかのモデルを更新した場合、dataSourceの.hasChanges()メソッドはtrueを返します。
grid.dataSource.hasChangesは、データソースが変更されたかどうかを通知します
if (datasource.hasChanges() === true) {
alert('yes');
} else {
alert('no');
}
最も便利な方法は、を使用することdatasource.hasChanges()
です。ただし、これには、Id
フィールドがスキーマで定義されている必要があります。
ドキュメントから:
データ項目が変更されているかどうかを確認します。[IDフィールド]をschema.model.idで構成する必要があります。そうしないと、常にtrueが返されます。
Idフィールドを定義していない場合は、無数の方法の1つを使用して、データ自体を反復処理できます。
var isDataSourceDirty = function (ds) {
var dirty = ds._data.filter(function(x){
return x.dirty === true;
});
return dirty.length > 0 || ds._destroyed.length;
};
試すだけの価値があります:
var hasDirtyRow = $.grep(gridDataSource.view(), function(e) { return e.dirty === true; });
if (hasDirtyRow.length != 0)
{
// grid has dirty row(s)
}