odoo15前端registry注册客户端动作和小部件

odoo15前端

描述

简单来说客户端动作通过注册一组widget,来绑定特定的action.

从服务器的角度来看客户端动作仅仅是 ir_action模型中保存的一条记录;从Web客户端角度来看,他是一个继承自AbstractAction类的小部件(widget)。

使用客户端动作前需要在注册表中进行注册(core.action_registry.add(’’, ‘’))

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,

            },

    });

广州众谛信息科技有限公司, Odoo小老谛 2024年1月18日
分析这篇文章
存档
登录 留下评论
odoo开发五大方法必须了解掌握
search、name_search、search_count、search_read、read_group方法