[IMP] web: ajax service: ensure widget is alive

... before resolving/rejecting the deferred once the RPC is done.
Doing this in the ajax service is equal to wrap every rpc with
this.alive() in the former versions.
This commit is contained in:
Aaron Bohy
2017-04-11 19:44:38 +02:00
parent 979d82abe8
commit 928af2b51f
2 changed files with 14 additions and 3 deletions
+2 -1
View File
@@ -456,7 +456,8 @@ var ServiceProvider = {
},
_call_service: function (event) {
var service = this.services[event.data.service];
var result = service[event.data.method].apply(service, event.data.args);
var args = event.data.args.concat(event.target);
var result = service[event.data.method].apply(service, args);
event.data.callback(result);
},
};
@@ -6,8 +6,18 @@ var session = require('web.session');
var AjaxService = AbstractService.extend({
name: 'ajax',
rpc: function (route, args, options) {
return session.rpc(route, args, options);
rpc: function (route, args, options, target) {
return $.Deferred(function (def) {
session.rpc(route, args, options).then(function () {
if (!target.isDestroyed()) {
def.resolve.apply(def, arguments);
}
}, function () {
if (!target.isDestroyed()) {
def.reject.apply(def, arguments);
}
});
}).promise();
},
});