2013-08-23 8 views
5

私は、バックボーンコレクションモデルを切り替えるときに(テーブル行をクリックして)保存されていない変更についてユーザーに「押しつける」必要があります。私は "バックボーンモデルの汚れたデータをチェック"(例えば)のためのグーグルで、何か決定的なものは見つけられませんでした。 コレクション内の汚れたバックボーンモデルデータを確認する

私はこの次のような方法で、 underscore's "some"isEqual functionalityを用いて達成する、「いくつかの()」(これらの正確な変更が何であるかとは対照的に) 任意未保存の変更があるかどうかを決定するのに十分です特にモデル属性が実際にはオブジェクトの配列であるためです。

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

私はバックボーンに新しいですし、これは汚れたモデルデータをチェックするアドホックのためのアプローチの受け入れられた一種である場合は疑問に思って。あるいは、バックボーンは、この目的のために何らかの組み込みの機能を提供しているのですか?私の最初の試みはグーグルでは明らかにしていませんでしたか?

+1

何についてhttp://stackoverflow.com/questions/9215036/backbone-js-is-there-a-change-since-last-server-save? – nikoshr

+0

それを指摘してくれてありがとう。今私は十分に私の質問を書いていないことを認識しています。特定のコレクションの*モデルが変更されたかどうかを知りたいと思います。この場合、私の_ _omeの使用はまだ関係しているようですが、イテレータの内部では、_.isEqual()の代わりに 'model.hasChanged()'を使用できます。 –

+1

代わりに、 'change'イベントが発生したとき。あなたのコレクションの状態としてそれを維持してください。コレクションがサーバーに再び同期したら、それをクリアします。その後、その状態属性からチェックします。私は 'change'も新しいモデルを作成するときに発生するので、' isNew() 'もチェックしたいと思うかもしれません。 – j03w

答えて

2

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

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

この不完全な解決策は、それが思われることであることを確認できるものを属性が元の値に戻っても、changedAttributesのオブジェクトを返します。したがって、私が長期的に必要とするのは、元のデータのスナップショットを撮り、それを比較することです。それでも、model.changedAttributes()を使うことは、私が最初に投稿したもののより簡潔な選択肢です。

+3

changedattributesには最後の '設定'以来のものは最後の '同期'ではない –

関連する問題