剣道グリッド に変更があるかどうかを確認するにはどうすればよいですか? dirty
プロパティがあると聞きましたが、見つかりません。
追加された行では、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で 'hasChanges'メソッドを使用できます。
grid.dataSource.hasChanges();
$('#divGrid').data('kendoGrid').dataSource.hasChanges();
通知を受け取り、データソースの変更イベントを使用できます。このイベントは、レコードをページ/ソート/グループ/フィルター/作成/読み取り/更新/削除するときに発生します。
それにハンドラーをアタッチするには、以下を使用します。
$('#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');
}
試すだけの価値があります:
var hasDirtyRow = $.grep(gridDataSource.view(), function(e) { return e.dirty === true; });
if (hasDirtyRow.length != 0)
{
// grid has dirty row(s)
}
最も便利な方法は、datasource.hasChanges()
を使用することです。ただし、これにはId
フィールドがスキーマで定義されている必要があります。
docs から:
データ項目が変更されたかどうかを確認します。 [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;
};