将子项添加到与父视图相同的块中

时间:2014-07-17 14:23:32

标签: javascript backbone.js marionette

不要被问题的长度吓倒,一般来说,问题是:

如何将CompositeView的孙子孙女与孙子女的父母一同追加到同一个街区?

childViewContainer的{​​{1}}非常智能,可以识别存在于自己模板中的选择器。但是,该视图的子CompositeView想要在父模板中使用选择器作为其自己的子视图的CompositeView将导致Backone抛出错误。问题是第一个孩子中的'childViewContainer'不知道查看该选择器的父模板。因此,如果我指定祖父表模板中存在的选择器,则孙子将不会附加有效的childViewContainer


本文的其余部分详细阐述了我的具体问题。如果您有任何想法可以解决我的特定问题,那很好。但如果你有上述问题并找到了解决方案,我会将其标记为答案

我有一组嵌套模型。模型看起来像:

childViewContainer

顶层是var aModel = { prop1.1: value1.1, prop1.2: value1.2, prop1.3: [ { prop2.1.1: value2.1.1, prop2.1.2: value2.1.2 }, . . . { prop2.N.1: value2.N.1, prop2.N.2: value2.N.2 } ] } ,其中包含以下内容

CompositeView

这个视图,称之为<table> <thead> <tr> <th> View1.HeadRow.Column1 </th> <th> View1.HeadRow.Column2 </th> <th> View1.HeadRow.Column3 </th> </tr> </thead> <tbody class="tbody1"> </tbody> </table> ,产生View1个孩子,说CompositeView个孩子,将会呈现View2 trel中的childContainer当然是View1(即上面的模板中)。

'View2'会渲染子<tbody>,并将其称为View3 ItemView View3 children. tr children render el`。

虽然此时我的方案意味着嵌套结构()。我想要完成的是View1 > View2 > View3View2应该呈现为兄弟姐妹。为了说明结果,应该如下所示:

View3

具有两个模型的渲染样本看起来像: Child as Sibling

我认为将<table> <thead> <tr> <th> View1.HeadRow.Column1 </th> <th> View1.HeadRow.Column2 </th> <th> View1.HeadRow.Column3 </th> </tr> </thead> <tbody class="tbody1"> <tr> <td rowspan="N+1"> View2.Row1.Column1 </td> <tr> <td> View3.Row2.Column2 </td> <td> View3.Row2.Column3 </td> </tr> . . . <tr> <td> View3.RowN.Column2 </td> <td> View3.RowN.Column3 </td> </tr> </tbody> </table> 渲染为View3的兄弟会的关键是将View2View3分配为View2,即

childViewContainer: 'tbody.tbody1'
View2视图中的

View2是生成View3的视图。但是,'tbody.tbody1'选择器是在View1模板中定义的。因此,在呈现View3子项时,'tbody.tbody1'选择器不在DOM中。如何将View3个孩子与View2个孩子放在同一个街区?

1 个答案:

答案 0 :(得分:1)

如果您想要执行上述解释,则需要破解CompositeView.render()功能。对于此特定用例,您最好想要创建自己的特殊Marionette.CompositeView类。

其核心CompositeView并非旨在能够执行您所描述的内容。

更多关于CompositeView by Derick Bailey, the author behind Marionette