2011-10-25 6 views
4

backbone.jsでネストされたモデルとビューを使用する方法についての一般的なアイデアを得たいと考えています。Backbone.jsネストされたビュー、一般的なアイデア

あなたにはたくさんのダイアログがあり、それぞれのダイアログにはたくさんのタブがあります。特定のタブが複数のダイアログで再利用される可能性があります。各タブは非常に異なっており、ダイアログに動的に新しいタブを追加することができます。

各タブごとに異なるビューを表示することは論理的です。また、ダイアログはビューでなければなりません。私は、モデルとビューがどのように一緒にフィットするかについて少し不明です。

これは私のメインの質問です:その後、

var childView = new ChildView(); 

そして、

this.$("#listOfChildViews").append(childView.el); 
へのjQueryを使用します。親ビューは、それはおそらく、実際のような何かをする必要があり、子ビューをレンダリングしたい場合

追加する前にリストをクリアするには、

this.$("#listOfChildViews").html(""); 

これを行うのが好ましい方法ですか?リスト全体をリッピングしてから、すべての新しいオブジェクトを作成して、一度にそこに追加するために、私にとっては少し悪いようです。レンダリング機能自体がなく、むしろ 'renderInitially'で、それから単純に 'add'(新しい子ビューを追加する)の場合は、おそらくもっと良いでしょう。

申し訳ありませんが、これはあまりにも一貫していません!

+0

すべてのネストされたビューをバインド解除することを忘れないでください。 –

答えて

5

ニック、

私はあなたがBackbone Modelsの力を入れなければならないと思います。

ダイアログモデル(または、ダイアログコンセプトのようにダイアログが表示されるためTabContainerかもしれません)があります。各ダイアログにはタブの集まりがあります(タブはビューユニバースからのものです)。

最初のレンダリングでは、DialogViewで、それぞれがTabViewにあるdialog.tabsコレクション全体を表示します。

ダイアログ・ビューでは、ダイアログ・モデルのタブ・コレクションからのイベントをリッスン(追加、削除、リセット)し、変更された要素に対応するビューのみを追加/削除できます。

自分でビューを追加/削除する機能を作成する必要があります。 add関数は、追加されたタブのビューを作成してレンダリングし、これをthisに追加します$( "#listOfChildViews")。

希望に役立ちます。

+0

返信いただきありがとうございます!私はあなたのアイデアが好きです。いくつかの具体的な質問... DialogViewにはダイアログモデルがあり、ダイアログモデルにはこのタブのコレクションがあるため、ダイアログモデルはビューを参照しませんか?これは私にとってうまくいくようですが、これは大丈夫ですか? –

+0

別の言い方をすれば、参照は次のようになります:DialogView> DialogModel> TabCollection> TabView> TabModel - このタイプのデザインですか、それとも大きな問題はありますか? –

+0

参照は次のとおりです:DialogModel - > TabsCollection - > TabModel。 DialogView - > DialogModel。 TabView - > TabModel。モデルについての見解では、モデルはそのビューについて知らない。 または、DialogView - > TabsCollection、TabView - > TabModelを持つことができます。 TabModelには他の名前がありますが、この情報はどのように表示されているのかは分かりませんが、その情報にはどのような情報が含まれているのでしょうか。 – dira

関連する問題