問題が発生しました:自分のCollectionView
をレンダリングしませんItemViews
。コレクションをレイアウトからコレクションビューに渡します。私はコレクションをフェッチしていCollectionView
ます:
レイアウト内:
// Create a a collection for the view
this.articles = new Articles(null, {
organizationId : this.model.organizationId,
projectId : this.model.id
});
var articlesView = new ArticleCollectionView({ collection : this.articles});
this.articlesRegion.show(articlesView);
CollectionViewの場合:
define([
'marionette',
'templates',
'i18n!nls/projectDashboard',
'views/projectDashboard/ArticleItem'
], function (Marionette, templates, msg, ArticleItemView) {
return Marionette.CollectionView.extend({
initialize : function () {
this.listenTo(this.collection, "reset", this.render);
this.collection.fetch();
},
itemView : ArticleItemView
});
});
ItemViewの場合:
define([
'marionette',
'templates',
'models/Article'
],
function (Marionette, templates, Article) {
return Marionette.ItemView.extend({
initialize : function () {
console.log('itemviewrender');
},
template : templates.projectDashboard.articleItem
});
});
セットアップは一般的に機能しています。これを機能させる1つの方法を見つけました。レイアウトでコレクションをフェッチCollectionView
し、成功コールバックのリージョンにを表示します。
ただし、コレクションのcollectionViewにリスナーを追加すると失敗します。次のような命令型および宣言型のリスナーに対してイベントは発生しません。
this.collection.on('reset', this.render, this);
また
collectionEvents : {
'reset' : 'render'
}
コレクションがフェッチされた場合、アイテムビューを使用してコレクションビューを再レンダリングしたいだけです。私は何かを逃したと確信しています。どんな助けでも大歓迎です!
更新:私は何か面白いものを見つけました:レイアウトでコレクションをフェッチし、それが機能する成功コールバックでcollectionViewを作成する場合はすでに述べました。興味深いのは、フェッチされたコレクションを渡すと、リスナーも機能するということです。もう一度呼び出すことthis.collection.fetch()
でトリガーしますinitialize
。その後、再レンダリングが機能します。レイアウトからのコレクションパスの周りにある必要があります。