在获取分配给Marionette CompositeView的模型后,尝试在Handlebars模板更新中创建数据字段,但页面中的HTML未更新。
我的代码如下所示:
型号:
B.Page.Model = Backbone.Model.extend({
url: function () {
return 'my/resource/';
},
});
查看:
B.Page.CompositeView = Backbone.Marionette.CompositeView.extend({
template: Handlebars.compile(templates.find('#my-template').html()),
initialize: function(options) {
_.bindAll(this);
this.model.fetch();
},
)};
的模板:
<script id="my-template" type="text/x-handlebars-template">
Date: <span id="my-data-field">{{data}}</span>
</script>
我检查了资源,它确实返回了data
字段集的正确JSON。此外,模型将传递到视图中。
我怀疑这是因为在检索到数据后没有调用render
函数;但是,我希望得到关于应该如何完成的反馈。
这样做的好方法是什么?
谢谢!
编辑:这个CompositeView确实有一个与之关联的Collection(当我触发相应的事件时渲染就好了)。我故意遗漏了部分代码,以避免混淆问题。
答案 0 :(得分:3)
你是对的,因为CompositeView
从CollectionView
延伸,它默认只对集合事件重新渲染。要让它在模型上的更改中重新渲染,您可以在CompositeView
中执行以下操作:
initialize: function(){
this.listenTo(this.model, "change", this.render);
}
答案 1 :(得分:1)
所有Marionette视图都有一个与传入模型绑定的modelEvents对象。所以你可以通过以下方式轻轻地清理接受的答案:
template: Handlebars.compile(templates.find('#my-template').html()),
modelEvents: {
'change': 'render'
}
而不是在初始化时手动绑定。