2011-10-25 46 views
4

我希望得到關於如何在backbone.js中使用嵌套模型和視圖的一般想法。Backbone.js嵌套視圖,一般想法

假設你有一堆對話框,每個對話框都有一堆選項卡。一個特定的選項卡可能會在多個對話框中重複使用。每個選項卡都非常不同,您可能需要動態地將新選項卡添加到對話框中。

對於每個標籤都有不同的視圖,這似乎是合乎邏輯的。另外,該對話框應該是一個視圖。對於模型和觀點如何融合在一起,我只是有點不清楚。

這是我的主要問題:

如果父視圖想要呈現子視圖,它可能需要做的其實是這樣的:

var childView = new ChildView(); 

然後,使用jQuery

this.$("#listOfChildViews").append(childView.el); 

爲確保清單在我們添加之前被清除,我們需要

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

這是做這件事的首選方式?因爲撕掉了整個列表,然後創建所有新對象並將它們一次添加到該對象中,看起來對我來說有點不好。如果本身沒有「渲染」功能,而是'renderInitially',然後只是'添加'(用於添加新的子視圖),那麼可能會更好。

對不起,這不是太連貫!

+0

不要忘記解除所有嵌套的視圖。 –

回答

5

尼克,

我認爲你應該投入骨幹模型的力量。

有一個對話框模型(或者可能是一個TabContainer,因爲對話框聽起來更像一個視圖概念)。每個對話框都有一個Tabs集合(Tab再次來自視圖Universe)。

在初始渲染中,在DialogView中,顯示整個dialog.tabs集合,每個集合都在TabView中。

然後,在DialogView中,您可以偵聽對話框模型(添加,刪除,重置)的選項卡集合中的事件,並僅添加/刪除與更改的元素相對應的視圖。

您必須創建自己添加/刪除視圖的函數。 add函數將爲添加的選項卡創建和呈現視圖,並將其添加到此。$(「#listOfChildViews」)。

希望有所幫助。

+0

感謝您的回覆!我喜歡你的想法。一些更具體的問題...由於DialogView有一個對話框模型,並且對話模型有這個選項卡集合,對話框模型不會引用視圖嗎?這對我來說似乎很好,但這是好的嗎? –

+0

換句話說,引用去:DialogView> DialogModel> TabCollection> TabView> TabModel - 是這種類型的設計好還是有一些大問題,我錯過了? –

+0

引用去:DialogModel - > TabsCollection - > TabModel。 DialogView - > DialogModel。 TabView - > TabModel。關於模型的觀點,模型並不瞭解這些觀點。 或者,你可以有DialogView - > TabsCollection,TabView - > TabModel。 您應該爲TabModel找到其他名稱,這些名稱不是來自如何顯示此信息,而是更多地來自它包含的信息類型。 – dira