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