我最近开始使用Odoo,并决定尝试定制表单视图。基本上,我想做的是在默认表单视图中添加一个自定义边栏,例如,清单应用程序的新收据。看起来像这样:
这就是我尝试的方法:我创建了一个模块,在其中写了一个小部件及其模板:
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'));
}
});
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>
在写完js和xml文件后,我不确定要去哪里,所以我只是将小部件添加到清单表单视图中,如下所示:
<odoo>
<data>
<record id="bh_sidebar_id" model="ir.ui.view">
<field name="name">sidebar_widget.bh_sidebar</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//header" position="after">
<widget name="bh_sidebar" />
</xpath>
</field>
</record>
</data>
</odoo>
问题是,该小部件在表单内部显示QWeb模板,但我希望在其外部,在取消按钮和文档状态小部件上方。 看到那里的红色条,我想要在元素的外部,但是我不能这样做,因为已在继承的窗体视图的内部添加了。
我想知道是否可以在表单外部调用小部件。也许我在做什么是错误的,还有另外一个更简单的解决方案。非常感谢您的反馈!