次のコードでわかるように、コレクションから取得およびフィルタリングされたデータでバックボーン ビューを初期化しようとしています。このフィルターは機能せず、すべてのアイテムを返します。
app.ShopView = Backbone.View.extend({
el:$('#content'),
initialize: function(options) {
var that = this;
this.collection = new app.ShopProductsCollection();
this.collection.fetch().done(function(){
var filterType = _.filter(that.collection.models,function(item){
return item.get('category') === 'accessories';
})
that.collection.reset(filterType);
});
this.listenTo(this.collection, 'add', this.addOne);
},
render: function() {
this.$el.html(this.template());
this.addAll();
return this;
},
addAll: function() {
this.collection.each(this.addOne, this);
},
addOne: function(model) {
view = new app.ShopItemView({model: model});
view.render();
this.$el.append(view.el);
model.on('remove', view.remove, view);
}
});
JQuery の $.when() ラッパーと、reset イベントのリスナーを使用して render メソッドを呼び出すことができました。これが私の新しい初期化メソッドです。
initialize: function(options) {
var that = this;
this.collection = new directory.ShopProductsCollection();
$.when(this.collection.fetch()).done(function(){
var filterType = _.filter(that.collection.models,function(item){
return item.get('category') === 'accessories';
})
that.collection.reset(filterType);
});
this.listenTo(this.collection, 'reset', this.render);
this.listenTo(this.collection, 'add', this.addOne);
},