this.collection.each()
バックエンドから取得したコレクションを反復処理するために使用しています。
問題:reset
コレクションのイベントをrender
メソッド内のビューのメソッドにバインドし、内に をinitialize
配置すると、期待どおりにコンソール出力が表示されることに気付きました。console.log()
this.collection.each
ただし、上記のバインディングを行わず、単にthis.render()
withininitialize
を使用すると、console.log()
は何も出力しません。これは私には本当に奇妙に思えます。誰か説明してもらえますか?
console.log(this.collection);
ループの直前にも配置しましたが、これは常にコレクションを正しく出力します! ビューの初期化時にコレクションが取り込まれていないと推測していましたが、それによりconsole.log(this.collection);
何も表示されなくなります。
この作品
SimilarPhotoListView = Backbone.View.extend({
el: '#modal_similar_items',
initialize: function() {
this.collection.on('reset', this.render, this);
},
render: function() {
console.log(this.collection);
this.collection.each(function(photo, index) {
console.log('hello');
}, this);
return this;
}
});
this.collection.each() 内からは出力されません
SimilarPhotoListView = Backbone.View.extend({
el: '#modal_similar_items',
initialize: function() {
this.render();
},
render: function() {
console.log(this.collection);
this.collection.each(function(photo, index) {
console.log('hello');
}, this);
return this;
}
});
両方のクラスは、次の方法でインスタンス化されます。
renderSimilarPosts: function() {
this.similarPhotoList = new SimilarPhotoCollection();
this.similarPhotoListView = new SimilarPhotoListView({ collection: this.similarPhotoList });
this.similarPhotoList.fetch({
data: {post_id: this.model.id},
processData: true
});
}