通过 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>
如果 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>