Composite View のComposite View ドキュメントによると、reset
eventsはすでにコレクションにバインドされています。remove
add
reset
そうは言っても、CompositeView をレンダリングするためにイベントをバインドする必要があるのはなぜですか?
PS:
私は使用してBackbone.Marionette v0.9.1
います 詳細についてはコードを参照してください (1)、(2)
実際の問題は serializeData に関するものです。これは、render 関数が 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}}