2012-02-09 19 views
0

私の例では、ModelAとをそれぞれ保持する2つのコレクション(AとB)を持つ親モデル(ModelParent)があります。関連する各モデルのビュー(ViewParentViewA、およびViewBBackbone.js - コレクションを参照してコレクションを別の(兄弟)コレクションに追加

は、私がCollectionBに新しい項目を追加するためにViewAに機能をしたいと思いますがあります。

これを行うための最善の方法は何ですか? (以下の可能性のカップル):それが作成されたときに

  • ViewAViewParentへの参照を渡すべきか?これを最もうまくいく方法は? (私が知っているところでは、ビルドの親参照にあります)
  • windowスコープに格納する必要がありますので、ViewAwindow.ViewAのようになりますか?私はそれについて別の方法を考えて検討する

答えて

2

(これは私には間違っているようです)。私はあなたがあなたの意見の周りにすべての参照を渡す必要がなかった場合は、よりクリーンなと信じています。代わりに、バックボーンのイベントモデルで構築を使用してViewParent内部ロジック「収集Bに新しい項目を追加する」保ちます。 ViewParentはViewAをインスタンス化するとき、あなたはすぐに上のイベントにバインドできます。

this.trigger("some_event_that_requires_adding_to_collection", itemIWantToAdd); 

に追加の引数を追加します。

this.viewA = new ViewA({}); 
this.viewA.bind("some_event_that_requires_adding_to_collection", this.onViewAEvent); 

インサイドViewA、あなたが収集Bに追加したい時はいつでも、ちょうどイベントをトリガそれらのイベントをイベントにバインドされたコールバックに渡します。

+0

これはいいですね - おかげ。私はそれを試してみましょう。 – UpTheCreek

+0

どちらの答えは素晴らしいですMediatorパターンを、言及します!背景の読書をチェックアウト:http://addyosmani.com/largescalejavascript/。 – Radek

3

あなたのコレクションのイベントを直接聞く以外の方法は、eventBusの使用です。 Los techiesのDerick Bailey氏は、articleと書いています。そこでは、eventBusを介してさまざまなコンポーネント間のコミュニケーションのアイディアを紹介しています。

coffeescriptとしっかりしていて、もしそうでない場合でも、この良いextensionをAdam Thurlowからチェックする必要があります。

サイドノート:あなたの状況が2つの要素間の通信を必要とするだけの場合、eventBusはおそらく過度の可能性がありますが、そのアイデアは非常に簡単です。それとは別に、私はそれは、メッセージングを簡素化デカップリングをサポートし、あなたのアーキテクチャ信頼性の高い一貫性を与えるような通信のための中心的なコンポーネントは努力の価値があることを、信じているのです。

関連する問題