[FIX] in m2o fields, abort previous name_get when new one (for same field) arrives in order to limit the number of requests in-flight

lp bug: https://launchpad.net/bugs/920884 fixed

bzr revid: xmo@openerp.com-20120124141927-wznbkd2tf3mngq31
This commit is contained in:
Xavier Morel 2012-01-24 15:19:27 +01:00
parent b39e6ae7f1
commit 084bf9fb3f
4 changed files with 26 additions and 2 deletions

View File

@ -443,7 +443,9 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
};
var deferred = $.Deferred();
this.on_rpc_request();
this.rpc_function(url, payload).then(
var aborter = params.aborter;
delete params.aborter;
var request = this.rpc_function(url, payload).then(
function (response, textStatus, jqXHR) {
self.on_rpc_response();
if (!response.error) {
@ -469,6 +471,16 @@ 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

@ -430,7 +430,9 @@ 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 || []
args: args || [],
// FIXME: API which does not suck for aborting requests in-flight
aborter: this
}, callback, error_callback);
},
/**

View File

@ -989,12 +989,17 @@ 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.abort_last = self.dataset.abort_last;
},
select: function (event, ui) {
self.id = ui.item.id;

View File

@ -1873,6 +1873,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.DataSetStatic(this, this.field.relation, self.build_context());
dataset.name_search(search_val, self.build_domain(), 'ilike',
@ -1912,6 +1916,7 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
response(values);
});
this.abort_last = dataset.abort_last;
},
_quick_create: function(name) {
var self = this;