odoo中註冊並新增客戶端動作
阿新 • • 發佈:2021-02-02
技術標籤:odoo文件odooodoo教程javascriptpostgresql其他pythonhtml
點選跳轉進入免費課程(課程持續更新中…)
課件文件地址:點選跳轉
課程環境地址:點選跳轉 賬密:testuser
gitee程式碼地址:點選跳轉(分支learning_odoo12)
微信公眾號二維碼:
描述
簡單來說客戶端動作通過註冊一組widget,來繫結特定的action.
從伺服器的角度來看客戶端動作僅僅是 ir_action模型中儲存的一條記錄;從Web客戶端角度來看,他是一個繼承自AbstractAction類的小部件(widget)。
使用客戶端動作前需要在登錄檔中進行註冊(core.action_registry.add(’’, ‘’))
新增客戶端動作(Adding a client action)
客戶端動作是一個小部件(Widget),新增客戶端動作需要實現兩個步驟:建立一個新的小部件以及在登錄檔中進行註冊
新增新的小部件(Widget)
var AbstractAction = require('web.AbstractAction');
var core = require('web.core');
var TongjiPage = AbstractAction.extend({
template: 'MainTongjiPage',
init: function(){
return this._super.apply(this, arguments);
},
}),
客戶端動作的註冊
首先我們需要web客戶端和TongjiPage 的對映
core.action_registry.add('tongji.page.main', TongjiPage);
然後,我們需要多在ir.actions.client中定義一條tag屬性為tongji.page.main的記錄
<record id="action_tongji_page" model="ir.actions.client">
<field name="name">統計</field>
<field name="tag">tongji.page.main</field>
</record>
## 控制面板(ControlPanelMixin) 那麼問題來了什麼是控制面板?
如下圖 的紅色框框區域↓↓↓
那麼在我們自定義的介面如何新增odoo 預設的控制面板呢?首先要知道的是預設AbstractAction類是不支援控制面板的。
在新增的Widget中新增控制面板的格式如下:
var ControlPanelMixin = require('web.ControlPanelMixin');
var TongjiPage = AbstractAction.extend(ControlPanelMixin, {
template: 'MainTongjiPage',
init: function(){
return this._super.apply(this, arguments);
},
}),
每次更新控制面板時需要呼叫_updateControlPanel方法(官方示例):
var SomeClientAction = Widget.extend(ControlPanelMixin, {
...
start: function () {
this._renderButtons();
this._updateControlPanel();
...
},
do_show: function () {
...
this._updateControlPanel();
},
_renderButtons: function () {
this.$buttons = $(QWeb.render('SomeTemplate.Buttons'));
this.$buttons.on('click', ...);
},
_updateControlPanel: function () {
this.update_control_panel({
cp_content: {
$buttons: this.$buttons,
},
});