Buona sera a tutti.
Ho un problema riguardo un piccolo modulo che sto facendo per odoo 8.0.
Riguarda l'eredità di una parte di codice relativa al modulo web che si trova nel file view_form.js
Dovrei fare questo:
Ereditare questo pezzo di codice originale che fa parte della sezione
instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
start: function() {
this._super.apply(this, arguments);
this.$el.addClass('oe_form_field oe_form_field_one2many');
var self = this;
self.load_views();
var destroy = function() {
self.is_loaded = self.is_loaded.then(function() {
self.viewmanager.destroy();
return $.when(self.load_views()).done(function() {
self.reload_current_view();
});
});
};
this.is_loaded.done(function() {
self.on("change:effective_readonly", self, destroy);
});
this.view.on("on_button_cancel", self, destroy);
this.is_started = true;
this.reload_current_view();
},
Con questo mio codice:
instance.web.form.FieldOne2Many.include({
start: function() {
this._super.apply(this, arguments);
// this._super(this, arguments);
this.$el.addClass('oe_form_field oe_form_field_one2many');
var self = this;
self.load_views();
var destroy = function() {
self.is_loaded = self.is_loaded.then(function() {
self.viewmanager.destroy();
return $.when(self.load_views()).done(function() {
self.reload_current_view();
});
});
};
this.is_loaded.done(function() {
self.on("change:effective_readonly", self, destroy);
});
this.view.on("on_button_cancel", self, destroy);
this.is_loaded.done(function() {
if (typeof self.field.views.tree !== 'undefined') {
_fields = self.field.views.tree.arch.children;
// Cerca se esiste il widget hide_column
_.each(_fields, function(el) {
if (el.attrs.widget == 'hide_column') {
var _checkbox = $(":checkbox[name='" + el.attrs.check_field + "']");
// Soluzione valida ma non mostra la colonna se il campo viene modificato
// da un evento esterno.
// _checkbox.on("change", self, destroy);
//
// Molto meglio del metodo sopra indicato.
self.field_manager.on("field_changed:" + _checkbox[0].name, self, destroy);
}
});
}
});
this.is_started = true;
this.reload_current_view();
},
});
Devo dire che funziona ma, avvolte, mi da degli errori che non accadono se inserisco questo pezzo di codice dentro l'originale(il primo che ho postato) e commentando quello scritto da me nel mio modulo.
this.is_loaded.done(function() {
if (typeof self.field.views.tree !== 'undefined') {
_fields = self.field.views.tree.arch.children;
// Cerca se esiste il widget hide_column
_.each(_fields, function(el) {
if (el.attrs.widget == 'hide_column') {
var _checkbox = $(":checkbox[name='" + el.attrs.check_field + "']");
// Soluzione valida ma non mostra la colonna se il campo viene modificato
// da un evento esterno.
// _checkbox.on("change", self, destroy);
//
// Molto meglio del metodo sopra indicato.
self.field_manager.on("field_changed:" + _checkbox[0].name, self, destroy);
}
});
}
});
Qualche suggerimento per ereditare in modo corretto?
Grazie