通过 CSS 隐藏表单视图按钮

Form View hide button via CSS

如果 Customer partner_id 为 False,我想在表单视图上隐藏一个按钮,我尝试 t-if 但没有成功,我绑定 attrs 但也没有用。

检查客户的状态 partner_id:

我想隐藏发送消息按钮:

有什么解决办法吗?

我试过 运行 CSS 隐藏按钮

我的代码:

<field name="name" attrs="{'invisible': [('partner_id', '=', False)]}">
      <style>
        .o_chatter_button_new_message {
                display: none !important;
        }
      </style>
      </field>

用你的方法是不可能的。 发送消息 按钮是动态呈现的,它是在 Qweb 模板中定义的。

您可以在此处找到按钮代码,Click Here

解决方案:要隐藏按钮,您可以在按钮呈现并传递值的 js 中执行此操作[检查 partner_id 是否为 False] 并添加按钮本身的条件。

谢谢

您可以在 FormRenderer 中执行此操作,并在 partner_id 的值更改时隐藏或显示按钮 您可以通过扩展 FieldMany2One 并更改可见性来创建新的 many2one 小部件按钮的状态取决于 partner_id.

的值

在下面的示例中,如果在加载表单视图时定义了 partner_id 或者当 partner_id 的值设置为 false 时,Send Message button 将被隐藏。当合作伙伴的值设置(onchange 事件)时,按钮应该是可见的。

odoo.define('stack_overflow.chatter_button_new_message', function (require) {
    "use strict";

    var FormRenderer = require('web.FormRenderer');

    FormRenderer.include({

        autofocus: function () {
            var self = this;
            if(self.state.model === 'project.task' && self.state.data.partner_id===false){
                var node = window.$('button.o_chatter_button_new_message');
                node.hide();
            }
            return this._super();
        },
    });

    var relational_fields = require('web.relational_fields');

    var FieldMany2One = relational_fields.FieldMany2One.extend({

        _onFieldChanged: function (event) {
            var node = window.$('button.o_chatter_button_new_message');
            if (event.data.changes[event.target.name]===false) {
                node.hide();
            } else {
                node.show();
            }

            this._super(event);
        },
    });

    fieldRegistry.add('hideSendMsg', FieldMany2One);
});

您应该在 asset bundle 中添加 js 文件。

要使用上面定义的小部件,您需要在 XML 定义中将 partner_id 字段的小部件属性设置为 hideSendMsg

<record id="view_task_form2_inherit" model="ir.ui.view">
    <field name="name">view.task.form2.inherit</field>
    <field name="model">project.task</field>
    <field name="inherit_id" ref="project.view_task_form2"/>
    <field name="arch" type="xml">
        <field name="partner_id" position="attributes">
            <attribute name="widget">hideSendMsg</attribute>
        </field>
    </field>
</record>

============================================= ================

我的解决方案:@Fotic

<script type="text/javascript">
        document.onload = check_status();
        document.onchange = check_status();
        function check_status() {
            if (document.getElementById("o_field_input_103")){
                var hasCSSClass = document.getElementById("o_field_input_103")
            }
            if (hasCSSClass){
              if ( hasCSSClass.classList.contains("o_field_empty") || hasCSSClass.classList.contains("o_input")) {
                  $(".o_chatter_button_new_message").show();
                  console.log("1111111111");
              } else{
                  $(".o_chatter_button_new_message").hide();
                  console.log("2222222222");
              }
            }
        }

    </script>