【发布时间】:2012-10-23 03:40:28
【问题描述】:
在导航到特定 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 我只是缺少一些东西,但是通过文档搜索似乎没有帮助。
第二个问题是:我是否以正确的方式实例化子视图,还是有更好的方法?
*EDIT - 所以经过一些试验,似乎“接受”的解决方案只是让父视图成为一个布局,它是一个扩展的 ItemView。这确实有效。但是,我仍然想知道为什么 ItemView 中的 ItemView 不起作用。我是否打算在 ItemView 上集成一个手写的 render() 方法,我要保持这种方式吗?
【问题讨论】:
标签: javascript backbone.js marionette