2012-06-18 43 views
2

我正在爲包含多個嵌套資源的資源開發單頁視圖。使用下面的模板,我可以得到頂級屬性或集合渲染,但不能同時:Marionette.Layouts可以在子區域之外有動態內容嗎?

h1= @name 
ul 
    #decisions 


class Happenator.Views.ShowHappening extends Backbone.Marionette.Layout 
    template: "happenings/show" 
    regions: 
    decisions: "#decisions" 

    initialize: -> 
    @decisionsView = new Happenator.Views.Decisions(collection: @model.get("decisions")) 
    # Uncomment to render @model.name, but lose the decisions 
    # @bindTo(@model, "change", @render) 

    onRender: -> 
    @decisions.show(@decisionsView) 

是否有綁定的頂層佈局重新呈現在數據更改/到達一個接受的方式,還是所有動態內容都支持進入分區域?

回答

6

佈局呈現區域將要管理的DOM元素。因此,再次在佈局上調用render將強制重新渲染該區域的元素。這些地區將會看到並再次提取它們,但這會對您的應用產生各種其他負面影響,正如您所指出的那樣。

簡單的方式來處理,這是要麼:

一)具有獨立的變化:屬性的事件處理程序,只有更新,改變

B)使用數據綁定解決方案,做到這一點的數據你,如https://github.com/theironcook/Backbone.ModelBinder

第三個替代方案是在你的佈局中創建第二個區域,並有一個ItemView用該模型填充該區域。然後,每當模型更改時,你可以重新渲染視圖:


h1= @name 
ul 
    #decisions 

class Happenator.Views.HeaderView extends Backbone.Marionette.ItemView 
    template: "happenings/model-template" 
    initialize: -> 
    @bindTo(@model, "change", @render) 

class Happenator.Views.ShowHappening extends Backbone.Marionette.Layout 
    template: "happenings/show" 
    regions: 
    header: "#header", 
    decisions: "#decisions" 

    initialize: -> 
    @decisionsView = new Happenator.Views.Decisions(collection: @model.get("decisions")) 
    @headerView = new Happenator.Views.HeaderView(model: @model) 

    onRender: -> 
    @decisions.show(@decisionsView) 
    @header.show(@headerView) 

如果是我,我會跟選項#3和巢去另一個ItemView控件的佈局裏面,對模型的渲染。這會讓您在該視圖中獲得更多的自由度和靈活性,從而與佈局保持分離。

+0

是的,選項#3似乎是最乾淨的。謝謝,Derick。 –

相關問題