Копаем это старый вопрос.У меня была похожая проблема, и я получил некоторую помощь в создании этого решения:
Расширяя функцию set, мы можем узнать, когда данные коллекции были преобразованы в реальные модели.(Set вызывается из .add и .reset, что означает, что он вызывается во время основной функции, создающей экземпляр класса Collection AND из выборки, независимо от reset
или set
в параметрах выборки. Погружение в основной источник с комментариямиздесь помогло следование потоку функций)
Таким образом, мы можем контролировать, когда и как мы получим уведомление, не взламывая поток выполнения.
var MyCollection = Backbone.Collection.extend({
url: "http://private-a2993-test958.apiary-mock.com/notes",
initialize: function () {
this.listenToOnce(this, 'set', this.onInitialized)
},
onInitialized:function(){
console.log("collection models have been initialized:",this.models )
},
set: function(models,options){
Backbone.Collection.prototype.set.call(this, models, options);
this.trigger("set");
}
})
//Works with Fetch!
var fetchCollection= new MyCollection()
fetchCollection.fetch();
//Works with initializing data
var colData = new MyCollection([
{id:5, name:'five'},
{id:6, name:'six'},
{id:7, name:'seven'},
{id:8, name:'eight'}
])
//doesn't trigger the initialized function
colData.add(new Backbone.Model({id:9,name:'nine'};
Примечание. Если мы не используем.listenToOnce
, тогда мы также будем вызывать onInitialized
каждый раз, когда модель добавляется или изменяется в коллекции.