2015-07-06 26 views
3

我正在用Backbone.js和Marionette.js建立一張桌子。我的模型集創建了表中的行,將其插入到<tbody>中。木偶:如何將一個LayoutView作爲一行添加到CompositView表中?

我想在表格頂部附上1個單行,這不是我收藏的一部分。這是以前定義的LayoutView

通常我只想補充另一個區域,但因爲我有一張桌子的工作,我不能額外div年代到tbody添加爲表都會吐出來的表作爲它不是一個<tr><tbody>的。

下面是我在我的CompositView的onShow功能構建這樣的嘗試:

var SetAllTargets = Backbone.Marionette.LayoutView.extend({ 
    template: JST["common/cubes/table/set-all-rows"], 
    tagName: "tr", 
    className: "set-all-targets" 
}); 


App.Table = Marionette.CompositeView.extend({ 

    template: JST["common/targets/layout"], 
    className: "targets", 
    childView: RowTarget, 
    childViewContainer: "tbody", 

    regions: { 
     targetsRegion: ".targets-region" 
    }, 

    onShow: function() { 
     var setAllTargetsRow = new SetAllTargets(); 
     var setAllTargetsRegion = "<tr class='target set-all-targets'></tr>"; 
     this.$el.find("tbody").prepend(setAllTargetsRegion); 
     this.$el.find(".set-all-targets").show(setAllTargetsRow); 
    } 
)}; 

的另一種嘗試是把

<tr class='target set-all-targets'> ...child elements here </tr> 

到模板,並連接view.elonShow功能像這樣:

onShow: function() {  
     var setAllTargetsRow = new SetAllTargets(); 
     this.$el.find("tbody").prepend(setAllTargetsRow.el); 
    } 

但是,結果只是HTML <tr class='target set-all-targets'></tr>被放置在表格的頂部,但沒有任何子元素。

回答

3

您可以使用CollectionView.addChild方法上的複合插入一些您的收藏之前被渲染:

onBeforeRenderCollection: function() { 
    this.addChild(null, <View>, 0); 
} 

See this fiddle在行動的它的例子。

+0

我結束了向我的頭插入額外的行 - 但這是更乾淨。我會盡快更新我的項目。謝謝! – conor909

相關問題