У меня есть пользовательский класс модели, в которой у меня есть свойство, которое говорит мне, когда модель была последней неправдоподобной:Задержка Backbone.sync события
var MyModel = Backbone.Model.extend({
fetched: null,
fetch: function(options) {
var self = this;
return Backbone.Model.prototype.fetch
.apply(this, arguments)
.done(function(){
self.fetched = _.now();
});
}
});
Затем мой взгляд слушает change
событий этой модели и делает себя когда это происходит, с другим результатом в зависимости от того, модель была неправдоподобной или нет:
var MyView = Backbone.View.extend({
initialize: function() {
this.listenTo(this.model, 'change', this.render);
},
render: function() {
if (this.model.fetched == null) {
// Do something
}
else {
// Do something else
}
return this;
}
});
Моей проблема заключается в том, что change
событие срабатывает как только Model.fetch
завершаются, даже до того, как установить self.fetched = _.now()
. Я знаю, что в данный момент я могу запустить событие вручную, но это было бы лишним, и я не уверен, что модель действительно изменилась во время этой выборки.
Есть ли способ поймать события, которые были вызваны во время разговора, до Backbone.Model.prototype.fetch
, чтобы я мог запускать их вручную в моем цепном done
?
Обновление: Или есть способ дать fetch
функцию, которая будет работать при успешном запуске событий?
Это не то, для чего предназначалось, но переопределение [parse] (http://backbonejs.org/#Model-parse) позволит вам запустить код до того, как данные будут применены к модели. – ivarni
@ivarni Да, из того, что я вижу в источнике, это единственное место, где я могу * вставлять * инструкции непосредственно перед запуском события «change» (см. Строку 592 [здесь] (https://github.com/jashkenas /backbone/blob/00f8b6fe797321131f76a72e95560ad2354c5dc9/backbone.js#L592), событие запускается при выполнении 'model.set (serverAttrs, options))'). Однако в этот момент я буду знать, что данные были успешно получены с сервера, но не в том случае, если он был успешно установлен в модель. Я начинаю думать, что единственный способ добиться того, что я хочу, это переписать «Backbone.Model.fetch». – arnaudrg