[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:
@@ -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();
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user