如何修改Odoo中chatter.js的message_get_suggested_recipients基础JS方法
如何在Odoo中重写mail模块的
message_get_suggested_recipients方法 嘿,我来一步步教你怎么基于你已有的自定义插件修改这个基础JS方法:
1. 确认自定义模块的文件结构
首先确保你的addon1模块结构是这样的(缺的文件要补上):
addon1/ ├── __init__.py ├── __manifest__.py ├── static/ │ └── src/ │ └── js/ │ └── chatter.js └── views/ └── chatter.xml
2. 编写自定义的chatter.js文件
在你的chatter.js里,我们要利用Odoo的组件继承机制,重写目标方法。代码大概是这样的:
odoo.define('addon1.chatter', function (require) { "use strict"; // 导入原有的Chatter组件 const Chatter = require('mail.Chatter'); const core = require('web.core'); const _t = core._t; // 继承并重写组件 Chatter.include({ /** * 重写获取建议收件人的方法 * @override */ message_get_suggested_recipients: function () { // 如果你需要保留原方法的逻辑,可以先调用父方法 let recipients = this._super.apply(this, arguments); // 在这里添加你的自定义逻辑,比如修改收件人列表 // 举个例子:添加一个自定义收件人 recipients.push({ partner_id: [123, "自定义联系人"], reason: _t("自定义原因") }); return recipients; }, }); return Chatter; });
注:如果完全不需要原方法的逻辑,直接删掉this._super那行,自己写全新的逻辑即可
3. 修正你的chatter.xml文件
你原来的xml里注释了template标签,这会导致你的JS文件无法被加载。修正后的代码应该是这样:
<?xml version="1.0" encoding="utf-8"?> <odoo> <data> <!-- 继承后端资源,加载我们的自定义JS --> <template id="assets_backend" name="addon1 chatter assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <script type="text/javascript" src="/addon1/static/src/js/chatter.js"></script> </xpath> </template> </data> </odoo>
4. 升级模块并测试
- 确保你的
__manifest__.py里已经正确声明了视图文件:'data': [ 'views/chatter.xml', ], - 回到Odoo后台,找到你的
addon1模块,点击升级 - 打开带有 chatter 的表单页面(比如销售订单),测试建议收件人是否按照你的逻辑显示
这样就能成功重写原有的message_get_suggested_recipients方法啦!
内容的提问来源于stack exchange,提问作者Developer Marius Žilėnas
相关产品推荐
相关产品推荐

