在我更改与ItemView
中的单个属性相对应的输入文本字段后,我会更新CompositeView
中的所有模型。
更新在模型中工作正常,但只有与上次编辑的输入文本字段对应的ItemView才会在DOM中显示新属性,因为它是CompositeView
中获取其onRender
的唯一元素方法叫做:
onRender: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
我想在onRender()
内的所有ItemViews
中再次调用CompositeView
功能。我怎样才能做到这一点?
答案 0 :(得分:1)
不是最优雅的解决方案,但这里是
var childViews = compositeView.children._views;
_.each(childViews, function(childView){
childView.render();
});
答案 1 :(得分:1)
阅读this question中显示的内容后,查看文档。我想我会尝试在change
中使用ItemView
事件监听器。
myItemView = Backbone.Marionette.ItemView.extend({
initialize: function() {
/*bind change event, will get onRender fired when the probability gets updated
this.model.bind('change', this.onRender);
error: 'cannot call' Cannot call method 'toJSON' of undefined
TODO: figure out WHY this is an error but this.render is OK*/
this.model.bind('change', this.render);
}
神秘地,onRender()
失败了,但是render()
完成了这项工作。现在我想弄明白为什么。