Просмотр коллекции марионеток, выборка коллекции не вызывает событий
У меня есть проблема: мой 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
});
});
Установка в целом работает. Я нашел один способ заставить это работать: получить коллекцию в макете и показать CollectionView в области на успешном обратном вызове.
Но добавление слушателей на collectionView для коллекции не удается. Ни одно событие не запускается для императивных и декларативных слушателей, таких как
this.collection.on('reset', this.render, this);
Или
collectionEvents : {
'reset' : 'render'
}
Я просто хочу повторно создать представление коллекции с его представлениями элементов, если коллекция будет извлечена. Я уверен, что что-то пропустил. Любая помощь ценится!
Обновление: я нашел кое-что интересное:
Я уже сказал, что если я получаю коллекцию в макете и создаю collectionView на успешном обратном вызове, он работает. Интересно вот что: слушатели тоже работают, если я передаю собранную коллекцию. Я вызываю их, снова вызывая this.collection.fetch() в initialize. Тогда повторная передача работает. Это должно быть что-то около коллекционного прохода из макета.
1 ответ:
Вы хотите использовать collectionEvents
Вот пример из Marionette Docs
Marionette.CollectionView.extend({ collectionEvents: { "sync": "render" } });В Примере рендеринг будет запущен, когда коллекция будет полностью заполнена из вашего бэк-энда
Comments