[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:
parent
aa7a8ed36a
commit
1aed1963c0
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
/**
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue