我有一个问题:我的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);
在集合视图中:
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
});
});
在项目视图中:
define([
'marionette',
'templates',
'models/Article'
],
function (Marionette, templates, Article) {
return Marionette.ItemView.extend({
initialize : function () {
console.log('itemviewrender');
},
template : templates.projectDashboard.articleItem
});
});
一般的设置是有效的。我找到了一种方法来完成这项工作:在布局中获取集合并CollectionView
在成功回调的区域中显示。
但是在 collectionView 上为集合添加侦听器失败。命令式和声明式侦听器不会触发任何事件,例如
this.collection.on('reset', this.render, this);
或者
collectionEvents : {
'reset' : 'render'
}
如果集合被提取,我只想用它的项目视图重新呈现集合视图。我确定我错过了一些东西。任何帮助表示赞赏!
更新:我发现了一些有趣的事情:我已经说过,如果我在布局中获取集合并在成功回调上创建 collectionView,它就可以工作。有趣的是:如果我通过获取的集合,侦听器也会工作。我通过再次调用this.collection.fetch()
来触发它们。initialize
然后重新渲染工作。它必须是布局中的集合传递周围的东西。