odoo中注册并添加客户端动作

点击跳转进入免费课程(课程持续更新中…)
课件文档地址:点击跳转
课程环境地址:点击跳转 账密:testuser
gitee代码地址:点击跳转(分支learning_odoo12)
微信公众号二维码:
odoo中注册并添加客户端动作


描述

简单来说客户端动作通过注册一组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中注册并添加客户端动作

那么在我们自定义的界面如何添加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,
            },
    });


上一篇:星辉odoo实施 - 小企业如何信息化


下一篇:odoo12开发手册 第四版-完整目录- 开源ERP 模块源码二次开发