2013-03-01 7 views
5

問題があります。CollectionViewは私のItemViewsを表示しません。私はレイアウトからコレクションビューにコレクションを渡します。私はCollectionViewでコレクションをフェッチしています:レイアウトのMarionette Collectionビュー、コレクションを取得してもイベントが発生しない

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); 

:ItemViewで

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 
    }); 

}); 

一般的にセットアップは働いている。私はこの作業を行うための1つの方法を見つけました:レイアウトでコレクションを取得し、CollectionViewを成功コールバックの領域に表示します。

ただし、コレクションのコレクションビューでリスナーを追加すると失敗します。いいえイベントは、コレクションをフェッチする場合、私は単にそれのアイテムビューでコレクションビューを再描画したい

this.collection.on('reset', this.render, this); 

または

collectionEvents : { 
    'reset' : 'render' 
} 

のような必要不可欠と宣言型のリスナーのために解雇されていません。私は何かを逃したと確信しています。どんな助けもありがとう!

更新:私は面白いものを見つけました: レイアウトでコレクションを取得し、成功したコールバックでcollectionViewを作成したとします。興味深いのは、取得したコレクションを渡すとリスナーも機能します。私はthis.collection.fetch()initializeに再度呼び出すことによってそれらを引き起こします。その後、再レンダリングが機能します。それは、レイアウトからのコレクションパスの周りにあるものでなければなりません。あなたがここれるCollectionEventsに

を使用したい

+0

ここでイベントをバインドしていますか?それは 'CollectionView'初期化メソッドにあるべきではありませんか?また、 'on'の代わりに' listenTo'を使用してみてください。 – neebz

+0

彼らはcollectionViewにあります。私は、ListViewを使ってdoenstの作業を行うかどうかを理解するためにCollectionViewに1つ追加してください。 – pfried

+0

これは面白いです。ドキュメントによると、Marionnetteが自動的にあなたのためにイベントを手動でバインドする必要はないようです。https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#コレクションビューレンダー。その場合、それは奇妙な問題であると思われます。 – neebz

答えて

2

はレンダリングマリオネットドキュメントの例では

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

の例であるコレクションは、完全にあなたのバックエンドから移入されたときにトリガされます

modelEvents and collectionEvents

関連する問題