如何在主干网中渲染和追加子视图.js
我有一个嵌套视图设置,它可以在我的应用程序中得到一些深入。我可以想到很多方法来初始化,渲染和附加子视图,但我想知道常见的做法是什么。
以下是我想到的几个:
initialize : function () {
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template());
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
优点:您不必担心通过附加来维护正确的 DOM 顺序。视图很早就被初始化了,因此在渲染函数中不需要一次完成太多操作。
缺点:您被迫重新委派Events(),这可能代价高昂?父视图的呈现功能与所有需要发生的子视图呈现杂乱无章?您无法设置元素,因此模板需要维护正确的 tagNames。tagName
另一种方式:
initialize : function () {
},
render : function () {
this.$el.empty();
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
this.$el.append(this.subView1.render().el, this.subView2.render().el);
}
优点:您不必重新委派事件。您不需要仅包含空占位符的模板,并且您的 tagName 已恢复由视图定义。
缺点:现在,您必须确保以正确的顺序附加内容。父视图的呈现仍然被子视图呈现弄得杂乱无章。
对于事件:onRender
initialize : function () {
this.on('render', this.onRender);
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
优点:子视图逻辑现在与视图的方法分离。render()
对于事件:onRender
initialize : function () {
this.on('render', this.onRender);
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1 = new Subview();
this.subView2 = new Subview();
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
我已经在所有这些例子中混合并匹配了一堆不同的实践(很抱歉),但是你会保留或添加哪些呢?你不会做什么?
做法摘要:
- 在 或 中实例化子视图?
initialize
render
- 在 或 中执行所有子视图呈现逻辑?
render
onRender
- 使用或 ?
setElement
append/appendTo