在导航到特定 URL 时,会触发一个控制器方法,它将 ItemView 加载到我的应用程序的一个区域中。这个 ItemView 本身(父级)将包含一些子 ItemView,当它自己渲染时将它们全部渲染。这是父项视图:
return Backbone.Marionette.ItemView.extend({
template: Handlebars.compile(template),
ui: {
textInput01: "#text-input-01"
},
events: {
// no events yet
},
initialize: function() {
// no init yet
},
onRender: function() {
this.appRoutefinderTextinputItemView = new AppRoutefinderTextinputItemView({parentView: this});
$(this.ui.textInput01).html(this.appRoutefinderTextinputItemView.render());
}
});
这是当前唯一的 ItemView:
return Backbone.Marionette.ItemView.extend({
template: Handlebars.compile(template),
events: {
// no events yet
},
initialize: function() {
// no init yet
},
onRender: function() {
// no onRender yet
}
});
出于某种原因,我无法理解,尽管子级上的initialize
和onRender
方法都在触发,并且所有必要的数据似乎都存在,但子级要么没有被渲染,要么以“空白”方式渲染,导致父级不变看法。
据我了解,我不需要调用render()
孩子,因为它在实例化/引用 ItemView 时暗示?即使我挂断render()
电话,也会得到相同的结果。
我必须假设有一些关于从我刚刚丢失的其他 ItemViews 中渲染 ItemViews 的东西,但是通过文档搜索似乎没有帮助。
第二个问题是:我是否以正确的方式实例化子视图,或者有更好的方法吗?
*编辑 - 所以经过一些试验,似乎“接受”的解决方案只是让父视图成为一个布局,它是一个扩展的 ItemView。这确实有效。但是,我仍然想知道为什么 ItemView 中的 ItemView 不起作用。我是否打算在 ItemView 上集成一个手写render()
方法,我是否要保持这种方式?