Odoo 15中继承Chatter的onClickSendMessage函数失效求助
解决Odoo 15 Chatter onClickSendMessage函数未被调用的问题
核心问题:混淆了Chatter的Model层与Component层
你贴的源码链接指向的是Chatter Model(邮件模块的业务逻辑层),但你的代码却在patchChatter Component(UI组件层),这两个是完全不同的对象,所以自定义方法根本不会被触发。
修复步骤及代码示例
修正导入路径,定位到Chatter Model
把组件导入改成Model导入,这是关键。修正patch代码逻辑
注意clear()函数未定义,这里改成Odoo标准的null来清空;如果需要保留原方法逻辑,可以调用this._super(...arguments)。确保模块配置正确
在自定义模块的__manifest__.py中声明JS文件,并依赖mail模块,保证加载顺序正确。
正确的JS补丁代码
/** @odoo-module **/ import { patch } from 'web.utils'; import { Chatter } from '@mail/models/chatter/chatter'; // 导入Chatter Model而非Component patch(Chatter.prototype, 'my_custom_module/static/src/js/chatter_patch.js', { onClickSendMessage(ev) { if (this.composerView && !this.composerView.composer.isLog) { this.update({ composerView: null }); // 替换未定义的clear() } else { this._super(...arguments); // 调用原方法逻辑,可根据需求调整 } } });
模块manifest配置示例
在__manifest__.py中添加以下内容:
{ 'name': 'My Custom Chatter Module', 'version': '1.0', 'depends': ['mail'], 'assets': { 'web.assets_backend': [ 'my_custom_module/static/src/js/chatter_patch.js', ], }, 'installable': True, 'auto_install': False, }
最后验证步骤
- 安装并激活自定义模块
- 清除浏览器缓存(Ctrl+Shift+R),或在Odoo开发者模式下点击「清除缓存」
- 打开包含Chatter的页面测试点击发送按钮,检查自定义逻辑是否生效
内容的提问来源于stack exchange,提问作者Ila Yadav
相关产品推荐
相关产品推荐

