#ember.js #ember-data
#ember.js #ember-data
Вопрос:
У меня есть модель, которую необходимо обновлять (перезагружать) при определенных действиях пользователя. Если два из этих действий выполняются в быстрой последовательности, я бы хотел, чтобы первый запрос на обновление был прерван, потому что а) его результат устареет, и б) запрос занимает некоторое время (поэтому постановка этих запросов в очередь также не является вариантом).
Есть ли способ легко достичь этого с помощью Ember Data?
Ответ №1:
Я переопределил ajax-метод адаптера приложения, чтобы добавить объект XMLHttpRequest в массив.
App.ApplicationAdapter = DS.RESTAdapter.extend({
xhr: [],
ajax: function(url, type, hash) {
var adapter = this;
return new Ember.RSVP.Promise(function(resolve, reject) {
hash = adapter.ajaxOptions(url, type, hash);
hash.success = function(json) {
Ember.run(null, resolve, json);
};
hash.error = function(jqXHR, textStatus, errorThrown) {
Ember.run(null, reject, adapter.ajaxError(jqXHR));
};
adapter.xhr.push(Ember.$.ajax(hash));
}, "DS: RestAdapter#ajax " type " to " url);
},
});
Затем, когда я захочу прервать запрос (в данном случае, с маршрута):
this.store.adapterFor('discussion').xhr.forEach(function(xhr) {xhr.abort();});