Я пытаюсь обернуть голову вокруг Odoo, особенно его виджетов, и это оказывается довольно неприятным, потому что документация очень тонкая.
Я работаю с пользовательским виджетом, который должен отображать состояние в определенной записи c. Я должен настроить виджет в соответствии с состоянием этой записи c. Виджет привязан к полю на соответствующей модели. Проблема в том, как узнать, к какой записи прикреплен мой виджет?
console.log (this) дает мне все окно.
Как выстрел в темноте, я добавил init -функцию к своему виджету. При этом код выглядит следующим образом:
odoo.define('web.web_widget_extooltip', function(require) {
"use strict";
var basic_fields = require('web.basic_fields');
var field_registry = require('web.field_registry');
var ListRenderer = require('web.ListRenderer');
var FieldTooltip = basic_fields.FieldText.extend({
template: 'FieldTooltip',
widget_class: 'oe_form_field_tooltip',
init: function (parent, name, state) {
console.log("this is the state:", state);
this._super(parent);
this.name = name;
this._initialState = state;
},
_renderReadonly: function () {
var show_value = this._formatValue(this.value);
this.$el.tooltip({'placement':'right', 'delay':0});
},
_renderEdit: function() {
this.$input = this.$el.find('input');
},
});
field_registry.add('extooltip', FieldTooltip);
return FieldTooltip;
});
Это и успех, и полный провал: console.log (state) действительно дает мне то, что мне нужно, потому что состояние имеет поле данных , содержащее имя записи, идентификатор и т. д. c. Сразу после этого Odoo падает, говоря:
web.assets_backend.js:1042 Uncaught TypeError: Cannot read property 'fields' of undefined
at Class.init (web.assets_backend.js:1042)
at Class.prototype.<computed> [as init] (web.assets_common.js:3538)
at Class.init (web.assets_backend.js:1053)
at Class.prototype.<computed> [as init] (web.assets_common.js:3538)
at Class.init (web.assets_backend.js:1054)
at Class.prototype.<computed> [as init] (web.assets_common.js:3538)
at Class.init (web.assets_backend.js:1080)
at Class.prototype.<computed> [as init] (web.assets_common.js:3538)
at Class.init (web.assets_backend.js:3304)
at Class.prototype.<computed> [as init] (web.assets_common.js:3538)
Я на правильном пути? Если да, что мне нужно сделать, чтобы предотвратить его сбой? Если нет, то как правильно go об этом?
Спасибо!