如何在Odoo中重写MessageActionList类的_computeHasReplyIcon函数?
重写Odoo邮件模块中MessageActionList的_computeHasReplyIcon方法
在Odoo中重写前端模型的计算方法,需通过**模块补丁(patch)**实现,禁止直接修改核心模块代码,具体步骤如下:
1. 准备自定义模块
如果还没有自定义模块,先搭建基础模块结构(包含__init__.py、__manifest__.py等必要文件)。
2. 创建补丁JS文件
在你的自定义模块下,创建路径:static/src/models/message_action_list/message_action_list.js,写入以下代码:
/** @odoo-module **/ import { patch } from '@mail/model/model_core'; // 补丁目标模型为mail.message_action_list,第二个参数是你的补丁唯一标识(模块名+自定义后缀) patch('mail.message_action_list', 'your_custom_module.message_action_list', { /** * 重写_hasReplyIcon的计算逻辑 * @private * @returns {boolean} */ _computeHasReplyIcon() { // 这里编写你的自定义逻辑,两种常见方式: // 方式1:完全重写逻辑 const message = this.messageView?.message; const currentPartnerId = this.messaging?.currentPartnerId; return message && currentPartnerId && message.author_id[0] !== currentPartnerId; // 方式2:基于原逻辑扩展(调用原方法结果后叠加自定义判断) // const originalResult = this._super(); // return originalResult && 你的额外判断条件; }, });
注意:将your_custom_module替换成你的自定义模块名称。
3. 配置模块资产加载
在模块的__manifest__.py文件中,添加该JS文件到前端资产包,确保Odoo加载时引入补丁:
{ # ... 其他manifest配置项 'assets': { 'web.assets_backend': [ 'your_custom_module/static/src/models/message_action_list/message_action_list.js', ], }, }
4. 应用补丁并测试
- 升级你的自定义模块
- 刷新前端页面,验证消息回复图标的显示逻辑是否按重写后的规则生效
内容的提问来源于stack exchange,提问作者Wald Sin
相关产品推荐
相关产品推荐

