根据Composite View documentation的说法
复合查看事件reset
,remove
和add
已绑定到集合。
说,为什么我需要绑定reset
事件来渲染我的CompositeView?
P.S .:
我正在使用Backbone.Marionette v0.9.1
有关详细信息,请参阅代码(1),(2)
实际上问题是关于serializeData,
因为从initialEvents
调用render函数时,变量has_message设置为零。所以ul.messages
未在模板中定义。
我该如何解决?
(1)
var CompositeView = Marionette.CompositeView.extend({
template: CompositeTemplate,
itemView: messageView,
initialize: function () {
this.collection = new MessageCollection();
this.collection.fetch();
this.bindTo(this.collection, 'reset', this.render);
// deleting the previous line
// I cannot see the collection rendered after the fetch.
},
serializeData: function () {
return {
has_messages: this.collection.length > 0
};
},
appendHtml: function (collectionView, itemView) {
collectionView.$el.find('ul.messages').append(itemView.el);
}
});
(2)
// Template
{{#if has_messages }}
<!-- list messages -->
<ul class="list messages"></ul>
{{else}}
no messages
{{/if}}
答案 0 :(得分:2)
需要自己绑定到“renset”是因为复合视图将重置事件绑定到集合渲染,而不是整个复合视图:
serializeData函数的问题可能是由上下文问题引起的。您需要将事件绑定更改为:
this.bindTo(this.collection, 'reset', this.render, this);
这会将视图的上下文与事件绑定。