[REM] horrible hack of a query-aborting API, use DropMisordered instead

DropMisordered does not abort late requests, but provides a better and simpler API if 'late' requests
(resolved after those following them) should just be ignored

bzr revid: xmo@openerp.com-20120302083941-pm43lag22bfac8g4
This commit is contained in:
Xavier Morel 2012-03-02 09:39:41 +01:00
parent aa7a8ed36a
commit 1aed1963c0
4 changed files with 19 additions and 37 deletions

View File

@ -476,9 +476,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
};
var deferred = $.Deferred();
this.on_rpc_request();
var aborter = params.aborter;
delete params.aborter;
var request = this.rpc_function(url, payload).then(
this.rpc_function(url, payload).then(
function (response, textStatus, jqXHR) {
self.on_rpc_response();
if (!response.error) {
@ -504,16 +502,6 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
};
deferred.reject(error, $.Event());
});
if (aborter) {
aborter.abort_last = function () {
if (!(request.isResolved() || request.isRejected())) {
deferred.fail(function (error, event) {
event.preventDefault();
});
request.abort();
}
};
}
// Allow deferred user to disable on_rpc_error in fail
deferred.fail(function() {
deferred.fail(function(error, event) {

View File

@ -745,9 +745,7 @@ openerp.web.DataSet = openerp.web.OldWidget.extend( /** @lends openerp.web.Data
method: method,
domain_id: domain_index == undefined ? null : domain_index,
context_id: context_index == undefined ? null : context_index,
args: args || [],
// FIXME: API which does not suck for aborting requests in-flight
aborter: this
args: args || []
}, callback, error_callback);
},
/**

View File

@ -1005,8 +1005,9 @@ openerp.web.search.ManyToOneField = openerp.web.search.CharField.extend({
this.got_name = $.Deferred().then(function () {
self.$element.val(self.name);
});
this.dataset = new openerp.web.DataSet(
this.view, this.attrs['relation']);
this.model = new openerp.web.Model(this.attrs['relation']);
this.orderer = new openerp.web.DropMisordered();
},
start: function () {
this._super();
@ -1020,23 +1021,21 @@ openerp.web.search.ManyToOneField = openerp.web.search.CharField.extend({
var self = this;
this.$element.autocomplete({
source: function (req, resp) {
if (self.abort_last) {
self.abort_last();
delete self.abort_last;
}
self.dataset.name_search(
req.term, self.attrs.domain, 'ilike', 8, function (data) {
resp(_.map(data, function (result) {
return {id: result[0], label: result[1]}
}));
self.orderer.add(self.model.call('name_search', null, {
name: req.term,
args: self.attrs.domain,
limit: 8
})).then(function (data) {
resp(_.map(data, function (result) {
return {id: result[0], label: result[1]}
}));
});
self.abort_last = self.dataset.abort_last;
},
select: function (event, ui) {
self.id = ui.item.id;
self.name = ui.item.label;
},
delay: 0
delay: 100
})
},
on_name_get: function (name_get) {
@ -1055,7 +1054,8 @@ openerp.web.search.ManyToOneField = openerp.web.search.CharField.extend({
this.id = this.id[0];
// TODO: maybe this should not be completely removed
delete defaults[this.attrs.name];
this.dataset.name_get([this.id], $.proxy(this, 'on_name_get'));
this.model.call('name_get', [[this.id]]).then(
this.proxy('name_get'));
} else {
this.got_name.reject();
}

View File

@ -1891,6 +1891,7 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
this.cm_id = _.uniqueId('m2o_cm_');
this.last_search = [];
this.tmp_value = undefined;
this.orderer = new openerp.web.DropMisordered();
},
start: function() {
this._super();
@ -2032,14 +2033,10 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
var search_val = request.term;
var self = this;
if (this.abort_last) {
this.abort_last();
delete this.abort_last;
}
var dataset = new openerp.web.DataSet(this, this.field.relation, self.build_context());
dataset.name_search(search_val, self.build_domain(), 'ilike',
this.limit + 1, function(data) {
this.orderer.add(dataset.name_search(
search_val, self.build_domain(), 'ilike', this.limit + 1)).then(function(data) {
self.last_search = data;
// possible selections for the m2o
var values = _.map(data, function(x) {
@ -2080,7 +2077,6 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
response(values);
});
this.abort_last = dataset.abort_last;
},
_quick_create: function(name) {
var self = this;