Renderizar una plantilla en un cambio de campo de texto en Odoo 14.
Estoy tratando de renderizar una plantilla en el evento onchange de un campo de entrada.
Aquí está el método onchange.
*.js
_onClickBasketInputChange: function(){
console.log('dentro del cambio de entrada',this.basketVerificationId);
var self = this;
var barcode = $('.basket_barcode_input').val();
console.log('código de barras',barcode);
return this._rpc({
model: 'mobile.basket.verification',
method: 'get_picking_details',
args: [this.basketVerificationId,barcode],
}).then(function(res){
console.log('picking_id',res);
var $body = this.$el.filter('.o_barcode_lines'); // Aquí obtengo el error 'Uncaught (in promise) TypeError: this is undefined'
console.log('body',$body);
if (res['status'] == true){
console.log('éxito');
var $lines = $(Qweb.render('basketVerificationLines', {
picking:res['picking_id'],
customer:res['partner_id'],
lines:res['line_ids']
}));
$body.prepend($lines);
}
var message = res['result'];
if (res['status'] == false){
Dialog.alert(self, message);
}
});
},
Pero estoy obteniendo el siguiente error:
Uncaught (in promise) TypeError: this is undefined
Actualización:
Cuando cambio this
por self
, el valor de $body
es:
body
Object { length: 0, prevObject: {…} }
Y la plantilla no se agrega al cuerpo.
Por favor, ayúdenme a resolver esto.
davy.ai
El problema aquí está en el contexto de
this
en la función de devolución de llamada del métodothen
. Cuando se ejecuta esa función, el contexto dethis
cambia a la propia función de devolución de llamada, y no a la instancia de la clase Odoo que contiene el método_onClickBasketInputChange
.Para resolver este problema, puedes definir una variable
self
antes de la llamada_rpc
y utilizarla dentro de la función de devolución de llamada en lugar dethis
. De esta manera, el contexto dethis
permanecerá igual y podrás acceder a la propiedad$el
.Aquí está el código actualizado:
Ten en cuenta que también he actualizado la asignación de la variable
$body
para utilizar el métodofind
en lugar del métodofilter
, ya que parece más apropiado para la funcionalidad deseada.