Estoy buscando una forma de anular algunas funciones centrales de web de openerp como "on_logout".openerp web client 6.1: cómo sobrescribir las funciones de base de JavaScript
El docs falta de instrucciones (como se puede ver en my post) y el helloworld module te dice que puede hacerlo como
openerp.web_hello = function(openerp) {
openerp.web.SearchView = openerp.web.SearchView.extend({
init:function() {
this._super.apply(this,arguments);
this.on_search.add(function(){console.log('hello');});
}
});
// here you may tweak globals object, if any, and play with on_* or do_* callbacks on them
openerp.web.Login = openerp.web.Login.extend({
start: function() {
console.log('Hello there');
this._super.apply(this,arguments);
}
});
};
En mi módulo que estoy haciendo esto:
openerp.mytest = function(openerp){
openerp.web.WebClient = openerp.web.WebClient.extend({
on_logout: function() {
alert('mine');
[...]
},
});
}
Sé que js se carga porque funciona una alerta fuera de esta definición.
¿Qué pasa aquí?
Hola, gracias por responder. Lo intenté pero no funciona. Sigue usando el original. FWIW Acabo de sacar el último lanzamiento. – simahawk
Oh demonios, había olvidado que esto era una "devolución de llamada" (los métodos 'on_ *' y 'do_ *' están ligados directamente a instancias durante 'init' si la clase extiende' openerp.web.CallbackEnabled' de alguna manera), y 'WebClient' se instancia antes de que se cargue cualquier módulo. Su única solución es usar javascript sin formato y acceder a 'openerp.webclient' (la instancia del cliente web para esta sesión, si corresponde) y modificarla directamente. Algo así como 'openerp.webclient.on_logout.add_first (function() {console.log ('my logout')});' funciona. Reemplazar on_logout probablemente no funcionará porque los eventos están vinculados ansiosamente (una mala idea). – xmo
Traté: openerp.mytest = function (OpenERP) { openerp.webclient.on_logout.add_first ('! Thatsme' function() { alerta();} ); } pero también parece inútil :( – simahawk