5

問題が発生しました:自分の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。その後、再レンダリングが機能します。レイアウトからのコレクションパスの周りにある必要があります。

4

1 に答える 1

2

collectionEventsを使用したい

これがマリオネットドキュメントの例です

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

この例では、コレクションがバックエンドから完全に入力されたときにレンダリングがトリガーされます

modelEventsおよびcollectionEvents

于 2014-11-10T22:29:32.917 に答える