翼度科技»论坛 编程开发 python 查看内容

odoo 通过Javascript显示或隐藏form自带按钮

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
实践环境

Odoo 14.0-20221212 (Community Edition)
需求描述

如下,根据条件对form视图自带按钮的显示、隐藏进行控制

代码实现

隐藏、显示编辑和创建按钮为例
odoo14/custom/estate/static/src/js/hide_or_show_form_button.js
  1. function isHideEditButton(arg){ // 自定义函数,用途参见下文
  2.     if (arg === 'Sold') {
  3.         return true
  4.     }
  5.     return false
  6. }
  7. odoo.define('estate.hide_or_show_form_button', function (require) {
  8.     'use strict';
  9.     let modelConfigs = {
  10.         'estate.property': { // form表单视图归属模型,即需要对按钮的显示做管控的模型名称
  11.              /* hideEditButton hideCreateButton的值可以简单理解为eval函数的参数,形如 eval(arg),整个表达式计算结果为bool值
  12.              值为真则表示需要隐藏按钮,否则显示按钮
  13.              如果不配置hideEditButton键,则表示显示编辑按钮,类似的,如果不配置hideCreateButton键,则显示创建按钮
  14.              */
  15.             'hideEditButton': 'isHideEditButton(this.renderer.state.data.state)', // 可选,是否隐藏编“Edit”编辑按钮 字符串类型
  16.             'hideCreateButton': "this.renderer.state.data.state === 'Sold'", // 可选,是否隐藏“Create”创建按钮 字符串类型
  17.         }
  18.     };
  19.     let FormController = require('web.FormController');
  20.     FormController.include({
  21.         updateButtons: function(){
  22.             let res = this._super.apply(this, arguments);
  23.             if (modelConfigs.hasOwnProperty(this.modelName)) {
  24.                 // 控制显示或者隐藏编辑按钮
  25.                 if (eval(modelConfigs[this.modelName].hideEditButton)) {
  26.                     this.$buttons.find('.o_form_button_edit').hide();
  27.                 } else {
  28.                     this.$buttons.find('.o_form_button_edit').show();
  29.                 }
  30.            
  31.                 // 控制显示或者隐藏创建按钮
  32.                 if (eval(modelConfigs[this.modelName].hideCreateButton)) {
  33.                     this.$buttons.find('.o_form_button_create').hide();
  34.                 } else {
  35.                     this.$buttons.find('.o_form_button_create').show();
  36.                 }
  37.             }
  38.             return res;
  39.         }
  40.     });
  41. })
复制代码
说明:

  • 如果需要隐藏其它自带按钮、或自定义按钮,可以通过查看form视图的html结构,依葫芦画瓢。
  • 根据实际需求,可以通过在js中打印this对象,以获取更多判断是否隐藏、显示按钮的有用信息。
加载自定义js
odoo14\custom\estate\views\webclient_templates.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <odoo>
  3.     <template id="assets_common" inherit_id="web.assets_common" name="Backend Assets (used in backend interface)">
  4.          <xpath expr="//script[last()]" position="after">
  5.              <script type="text/javascript" src="/estate/static/src/js/hide_or_show_form_button.js">
  6.          </xpath>
  7.     </template>
  8. </odoo>
复制代码
来源:https://www.cnblogs.com/shouke/p/17135860.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具