web-dev-qa-db-ja.com

剣道グリッドに変更が加えられたかどうかを確認するにはどうすればよいですか?

剣道グリッド に変更があるかどうかを確認するにはどうすればよいですか? dirtyプロパティがあると聞きましたが、見つかりません。

20
muthucsm

追加された行では、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;
}
19
carlg

グリッドの基になるDataSourceで 'hasChanges'メソッドを使用できます。

grid.dataSource.hasChanges();

$('#divGrid').data('kendoGrid').dataSource.hasChanges();
30

通知を受け取り、データソースの変更イベントを使用できます。このイベントは、レコードをページ/ソート/グループ/フィルター/作成/読み取り/更新/削除するときに発生します。

それにハンドラーをアタッチするには、以下を使用します。

$('#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を返します。

9
Petur Subev

grid.dataSource.hasChangesは、データソースが変更されたかどうかを通知します

                            if (datasource.hasChanges() === true) {
                                alert('yes');
                            } else {
                                alert('no');
                            }
3

試すだけの価値があります:

var hasDirtyRow = $.grep(gridDataSource.view(), function(e) { return e.dirty === true; });
if (hasDirtyRow.length != 0)
{
     // grid has dirty row(s)
}
1
Ann B. G.

最も便利な方法は、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;
};
1
Marco