我有一个必须在某些用户操作上更新(重新加载)的模型。如果其中两个动作快速连续发生,我希望第一个更新请求被中止,因为a)它的结果将过时,并且b)请求需要一些时间(因此排队这些请求是也不是一种选择。
有没有办法通过Ember Data轻松实现这一目标?
答案 0 :(得分: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();});