【问题标题】:Marionette Collection View, fetching collection doesn't trigger eventsMarionette Collection View,获取集合不会触发事件
【发布时间】:2013-03-01 12:21:19
【问题描述】:

我遇到了一个问题:我的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

    });

});

在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'
}

如果集合被提取,我只想用它的项目视图重新呈现集合视图。我确定我错过了一些东西。任何帮助表示赞赏!

更新:我发现了一些有趣的东西: 我已经说过,如果我在布局中获取集合并在成功回调上创建集合视图,它就可以工作。有趣的是:如果我通过获取的集合,侦听器也会工作。我通过再次在initialize 中调用this.collection.fetch() 来触发它们。然后重新渲染工作。它必须是布局中的集合传递周围的东西。

【问题讨论】:

  • 在哪里绑定事件?不应该在CollectionView初始化方法中吗?也尝试使用listenTo 而不是on
  • 它们在 collectionView 中,我想我应该在 CollectionView 中添加一个以便更好地理解,我想也不能与 listenTo 一起使用
  • 这很有趣。根据文档,您似乎不需要手动绑定事件,因为 Marionnette 会自动为您完成,请参阅:github.com/marionettejs/backbone.marionette/blob/master/docs/…。在那种情况下,这似乎是一个奇怪的问题,
  • 你能在你的应用程序中的第 1202 行在这里放置一个断点吗> github.com/marionettejs/backbone.marionette/blob/master/lib/… 看看它是否被正确调用。
  • 调用正确

标签: javascript backbone.js view collections marionette


【解决方案1】:

你想使用collectionEvents

这是 Marionette Docs 中的一个示例

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

在示例中,当集合已从您的后端完全填充时,将触发渲染

modelEvents and collectionEvents

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多