我创建了一个定义小部件的自定义模块。这是.js文件和QWeb模板:
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
)
})
<?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>
我已经使用以下两种方法将它们添加到了后端资产中:
<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导航栏下方的屏幕顶部。我该怎么办?如果我尝试按原样运行代码,则不会发生任何事情。我来这已经一个星期了。我在互联网上找不到任何帮助。该文档在犯罪方面已过时,资源稀缺。
我将不胜感激。 谢谢。
答案 0 :(得分:0)
我认为你应该使用控制器机制来呈现这个视图,这将使这个视图独立于其他视图。
答案 1 :(得分:0)
您的小部件不会被自动实例化并插入到 DOM 中。为此,您可以连接到任何现有的高级小部件。例如,在 WebClient 上使用 show_application
方法:
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;
},
});