5

ユーザーが異なるバックボーン コレクション モデルを切り替えるときに (テーブルの行をクリックして)、保存されていない変更についてユーザーに「しつこく」要求する必要があります。「バックボーンモデルのダーティデータを確認する」(たとえば)をグーグルで検索しましたが、決定的なものは見つかりませんでした。

以下のような方法で、アンダースコアの "some"およびisEqual 機能を使用してこれを達成しました。特に、モデル属性は実際にはオブジェクトの配列であるためです。

var anyDirty = _.some(myCollection.models, function(model) {
    return !_.isEqual(model.get('nodes'), model.previousAttributes()['nodes]);
});

私はバックボーンを初めて使用し、これがダーティ モデル データのアドホック チェックのための受け入れられた種類のアプローチであるかどうか疑問に思っています。または、バックボーンは、この目的のためにある種の組み込み機能を提供しますが、最初のグーグルの試みでは明らかになりませんでしたか?

4

1 に答える 1

2

「ノード」に加えて監視する必要がある別の属性があるため、changedAttributes() の使用に切り替えています: http://backbonejs.org/#Model-changedAttributes :

var anyDirty = _.some(myCollection.models, function(model) {
    return model.changedAttributes();
});

これを不完全な解決策にする可能性があるのは、属性が元の値に変更された場合でも、 changedAttributes のオブジェクトを返すように見えることです。したがって、長期的には、元のデータのスナップショットを取得し、それと比較することが必要なようです。それでも、 model.changedAttributes() を使用することは、私が最初に投稿したものよりも簡潔な代替手段です。

于 2013-08-26T15:08:37.570 に答える