odoo创建自定义后端表单小部件以呈现html视图

时间:2016-11-08 17:44:19

标签: openerp odoo-8 odoo-9 odoo-view

嗨,我被困在一个窗口小部件创建,它在窗体视图上呈现自定义的html内容,我不知道如何关注。这是我的代码

JS:

(function (instance) {
    var _t = instance.web._t,
        _lt = instance.web._lt;
    var QWeb = instance.web.qweb;

    console.log('hi..........');  // Custome message to dispaly on console
    openerp.my_module = function (instance, local) {
        console.log(instance);
        instance.web.form.widgets.add('my_module.home', 'instance.my_module.Home');
        instance.my_module.Home = instance.web.form.FormView.extend({
            template: 'my_template',
            init: function (view, code) {
                console.log("::: INIT");
            },
            start: function () {
                console.log("::: START");
            }
        });

    }
})(openerp);

xml模板

<?xml version="1.0" encoding="UTF-8"?>
    <templates id="template" xml:space="preserve">
        <t t-name="my_template">
            <div>
                Template content
            </div>
        </t>
    </templates>

此时仅在终端中显示'hi..........'和对象实例,但从不运行窗口小部件代码。所以我的问题是。如何在表单配置中使用它,如果我在这里遗漏了什么

    <record id="view_form_my_module" model="ir.ui.view">
        <field name="name">My Module</field>
        <field name="model">my.module</field>
        <field name="arch" type="xml">
            <form>
                <sheet>
                    **HOW TO ISE IT HERE**
                </sheet>
            </form>
        </field>
    </record>

1 个答案:

答案 0 :(得分:2)

在我看来,您可能真的想要使用FormWidget而非扩展FormView。我不是javascript扩展专家。但是,如果您按照The Form View Custom Widgets找到here的文档进行操作,您可能会发现更容易实现您的目标。使用<widget/>标记也可以轻松地在任何表单视图中删除小部件。

local.YourWidgetClassName = instance.web.form.FormWidget.extend({
    start: function() {
        this._super();
        this.display_html();
    },
    display_html: function() {
        this.$el.html(QWeb.render("your_qweb_template", {
            "arg1": "Hello",
            "arg2": "World",
        }));
    }
});

instance.web.form.custom_widgets.add('widget_tag_name', 'instance.your_addon_name.YourWidgetClassName');

现在你在qweb我会这样称呼它。

<widget type="widget_tag_name"></widget>