К какой записи прикреплен мой виджет Odoo? - PullRequest
2 голосов
/ 21 января 2020

Я пытаюсь обернуть голову вокруг 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 об этом?

Спасибо!

...