2012-08-16 57 views
4

一個簡單而簡短的問題:如果一個視圖包含兩個或多個子視圖。視圖容器應該是佈局視圖嗎?嵌套視圖應該是佈局視圖嗎?

如果沒有,有什麼好的替代方案?

更新:

我的代碼:

var LikeButtonModal = Backbone.Model.extend({ 
    url: 'api/profile/like/' 
}); 

var LikeButton = Backbone.Marionette.ItemView.extend({ 
    tagName: 'button', 
    className: 'like', 
    template: '<div>like</div>', 
    events: { 
     'click' : 'like' 
    }, 
    initialize: function(userId){ 
     this.model = new LikeButtonModal(); 
    }, 
    like: function(){ 
     this.model.save(); 
    } 
}) 

var LeftProfileView = Backbone.Marionette.Layout.extend({ 
    template: '#profile-left', 
    regions:{ 
     extra : '.extra' 
    }, 
    initialize: function(){ 
     this.on("item:rendered", this.editable, this); 
    }, 
    onRender: function(){ 
     if(this.model.get('userid') != ActiveUser.get('userid')){ 
      this.extra.show(new LikeButton(this.model.get('userid'))); 
     } 
    } 
}); 

回答

4

佈局有利於這一點,如果你會在不同的時間更換副意見,或者如果子視圖是非常不同的類型.. 。例如,一個佈局可能包含您的標題,導航和主要內容區域。

其他選項是CollectionViews和CompositeViews。

集合視圖將呈現項目集合,對集合中的每個項目使用相同類型的視圖。這適用於列表的東西。

CompositeViews是CollectionView,可以在集合周圍呈現包裝模板。例如,一個HTML表格結構。 table,thead,tbodytfooter標籤可以在CompositeView的包裝模板中呈現,然後可以將一組項目渲染到tbody標籤中。

這可能擺脫多一點光關於這個問題,太:https://github.com/derickbailey/backbone.marionette/wiki/Use-cases-for-the-different-views

+0

我不是在這種情況下更換子視圖。我只是有一個按鈕的菜單,我給了一個單獨的區域,因爲它有它自己的模型和一些邏輯。用於此目的是否是錯誤的?我已閱讀所有文檔,但我不知道如何處理包含邏輯的靜態子視圖。 – Boedy 2012-08-16 20:25:05

+0

佈局會適合那種情況 – 2012-08-16 20:25:54

+0

我已更新我的帖子並添加了一些代碼。這是應該如何完成的?或者你認爲有更好的方法嗎? – Boedy 2012-08-16 20:28:55