Просмотр коллекции марионеток, выборка коллекции не вызывает событий



У меня есть проблема: мой 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. Тогда повторная передача работает. Это должно быть что-то около коллекционного прохода из макета.

676   1  

1 ответ:

Вы хотите использовать collectionEvents

Вот пример из Marionette Docs

 Marionette.CollectionView.extend({
   collectionEvents: {
    "sync": "render"
   }
 });

В Примере рендеринг будет запущен, когда коллекция будет полностью заполнена из вашего бэк-энда

ModelEvents и collectionEvents

Comments

    Ничего не найдено.