根据复合视图中的复合视图文档,事件reset
,remove
并且add
已经绑定到集合。
说了这么多,为什么我需要绑定reset
事件来渲染我的CompositeView?
PS:
我正在使用Backbone.Marionette v0.9.1
更多细节请看代码(1),(2)
其实问题是关于serializeData,因为当从 initialEvents
变量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}}