【问题标题】:Form View hide button via CSS通过 CSS 的表单视图隐藏按钮
【发布时间】:2020-03-20 12:08:41
【问题描述】:

在表单视图中,如果客户 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>

【问题讨论】:

    标签: css xml odoo odoo-12


    【解决方案1】:

    您可以在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);
    });
    

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

    要使用上面定义的小部件,您需要在 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>
    

    【讨论】:

    • 首先感谢您的努力.. 我可以在表单视图中运行此代码吗?我也只想检查res.partner 字段是否为空......还有FormRenderer 是什么,因为我在Odoo 上太nobbie?
    • 您需要检查partner_id 是否等于false,然后在表单视图加载后隐藏按钮。渲染器作业表示正在 DOM 元素中查看的数据。我编辑了答案以添加指向 Odoo 12 视图文档的链接,阅读有关视图的部分,您将了解它是如何工作的。添加您使用的模型和视图,我将更新上面的示例。
    • 你好,我想要的视图是:project.task.form external_id:project.view_task_form2 model:project.task。如果你有时间帮我解决这个问题,我会很高兴的。提前致谢
    • 非常感谢您的帮助,但我无法访问后端,因此无法将其作为插件,但无论如何我找到了解决方案,我认为这不是完美的,但可以完成工作。如果他提出要求,我也会接受您的回答并为其他所有人编写我的解决方案。
    【解决方案2】:

    您采用的方法是不可能的。 Send message 按钮是动态呈现的,并在 Qweb 模板中定义。

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

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

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2019-01-27
      • 2014-11-04
      • 2011-03-05
      • 2014-01-21
      • 2014-08-11
      相关资源
      最近更新 更多