首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Odoo-12:我创建了一个小部件。我该如何使用它?

Odoo-12:我创建了一个小部件。我该如何使用它?
EN

Stack Overflow用户
提问于 2019-01-29 08:55:23
回答 2查看 1.1K关注 0票数 4

我创建了一个自定义模块来定义小部件。下面是.js文件和QWeb模板:

bh_sidebar.js

代码语言:javascript
复制
odoo.define('sidebar_widget.bh_sidebar', function (require) {
    'use strict';
    var Widget = require('web.Widget');
    var widgetRegistry = require('web.widget_registry');
    var core = require('web.core');

    var QWeb = core.qweb;
    var _t = core._t;

    var bh_sidebar = Widget.extend({
        init: function () {
            var self = this;
            this._super(parent);
            console.log('Widget initialized!');
        },

        events: {},

        start: function () {
            this.$el.append(QWeb.render('bh_sidebar_template'));
            console.log('Widget started!');
        }

    });

    widgetRegistry.add(
        'bh_sidebar', bh_sidebar
    )
})

bh_sidebar.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<templates id="template" xml:space="preserve">
    <t t-name="bh_sidebar_template">
        <div style="background-color:red;" class="myClass">
            <a href="#" class="butt1">Button 1</a>
            <a href="#" class="butt2">Button 2</a>
        </div>
    </t>
</templates> 

我使用以下命令将这两项添加到后端资产:

代码语言:javascript
复制
<odoo>
    <data>
        <template id="assets_backend" inherit_id="web.assets_backend">
            <xpath expr="script[last()]" position="after">
                <script type="text/javascript" src="/sidebar_widget/static/src/js/bh_sidebar.js"></script>
                <!-- <script type="text/javascript" src="/sidebar_widget/static/src/js/renderer.js"></script> -->
                <link rel="stylesheet" type="text/scss" href="/sidebar_widget/static/src/scss/widget.scss"></link>
            </xpath>
        </template>
    </data>
</odoo>

我还将模板添加到了清单文件中。

这个小工具应该显示一个带有两个链接的红色矩形,按钮1和按钮2。我希望这个小工具独立于任何类型的视图,并且只显示在屏幕顶部Odoo导航栏的下面。我该怎么做呢?如果我试图按原样运行我的代码,什么也不会发生。我已经干了一周了。我在网上找不到任何帮助。这些文件已经过时了,资源稀缺。

如果有任何帮助,我将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-05-05 17:02:53

您的小部件不会自动实例化并插入到DOM中。为此,您可以连接到任何现有的高级小部件。例如,在WebClient上使用show_application方法:

代码语言:javascript
复制
var WebClient = require('web.WebClient');

WebClient.include({

    show_application: function () {
        var sup = this._super.apply(this, arguments);

        // Instantiate
        var sidebar = new bh_sidebar();

        // Insert in DOM
        sidebar.insertAfter(this.$('.o_main'));

        return sup;
    },

});
票数 1
EN

Stack Overflow用户

发布于 2021-05-05 13:25:55

我认为你应该使用控制器机制来渲染这个视图,这将使这个视图独立于其他视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54412424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档