私のBackbone.jsプロジェクトには、1つのモデルと複数のビューがあります。すべてのビューには'change:currentTextTitle'
、このモデルのコールバックが登録されています。
// 'this' stands for any of the Views here
myModel.on('change:currentTextTitle', this.render, this);
ここで、ユーザーが何らかのアクションを実行すると、特定のビューの「現在のテキストタイトル」フィールドが変更されます。次に、この特定のビューが呼び出され、すべてのビュー(set()が発生したビューを含む)を呼び出すイベントmyModel.set("currentTextField", newTextValue)
がトリガーされます。次に、すべてのビューがコールバック関数を呼び出します。'change:currentTextTitle'
render
問題はrender
、set()-メソッドが最初に呼び出されたビューでもメソッドが呼び出されることです。これは、すでに最新であるため、完全に不要ですcurrentTextTitle
。
他のビューのコールバックに通知されるように、ビューはmyModel.set()をどのように呼び出しますが、「ソースビュー」自体をトリガー/呼び出すことはありませんか?
回避策の1つは、メソッドのoptions
パラメーターの一部としてソースビューを渡すことです(コールバックに渡され、次にコールバックに渡されます)。set()
trigger()
render()
myModel.set("currentTextField", newTextValue, thisViewSetAttribute)
次に、render
コールバックでthisViewSetAttribute != this
。ただし、すべてのコールバックにチェックを実装する代わりに、必要なコールバックを呼び出し、set()メソッド呼び出しの元となったソースビューを無視することで、モデル自体でこれを処理する方が理にかなっていると思います。これは可能ですか?