Odoo 15 POS中SaleOrderRow类date方法重写无效问题
Odoo 15 重写pos_sale模块SaleOrderRow类date getter方法未生效问题
我要重写Odoo 15中pos_sale模块的SaleOrderRow类的date getter方法,已编写自定义JS类并添加到模块manifest的assets配置中。但重启服务、用隐私窗口规避缓存后,浏览器控制台无任何输出,自定义JS类未被Odoo识别。
原模块相关代码
原类定义
odoo.define('pos_sale.SaleOrderRow', function (require) { ... })
待重写的date getter方法
get date() { return moment(this.order.date_order).format('YYYY-MM-DD hh:mm A'); }
我的自定义代码
自定义重写类
odoo.define('slnee_appointment_sale.CustomSaleOrderRow', function (require) { ... })
模块manifest配置
'assets': { 'point_of_sale.assets': [ "slnee_appointment_sale/static/src/js/CustomSaleOrderRow.js" ] }
排查与解决步骤
确认重写逻辑正确
Odoo的POS组件重写必须遵循正确的扩展方式,不能直接定义新组件。正确的重写示例如下:odoo.define('slnee_appointment_sale.CustomSaleOrderRow', function (require) { const SaleOrderRow = require('pos_sale.SaleOrderRow'); const Registries = require('point_of_sale.Registries'); const CustomSaleOrderRow = SaleOrderRow => class extends SaleOrderRow { get date() { // 这里写你的自定义逻辑,比如修改日期格式 return moment(this.order.date_order).format('YYYY/MM/DD HH:mm'); } }; Registries.Component.extend(SaleOrderRow, CustomSaleOrderRow); return CustomSaleOrderRow; });核心是通过
Registries.Component.extend来扩展原组件,确保Odoo能识别到重写。检查资产加载顺序与依赖
- 确保你的模块在manifest的
depends中声明依赖pos_sale:'depends': ['base', 'pos_sale'], - 调整assets配置,让你的JS文件在原模块文件之后加载:
'assets': { 'point_of_sale.assets': [ ('after', 'pos_sale/static/src/js/sale_order_row.js'), 'slnee_appointment_sale/static/src/js/CustomSaleOrderRow.js', ] }
- 确保你的模块在manifest的
验证模块安装与资产加载
- 确认
slnee_appointment_sale模块已在Odoo后台安装并启用。 - 打开浏览器开发者工具的
Sources标签,搜索CustomSaleOrderRow.js,检查文件是否被成功加载。
- 确认
强制刷新Odoo资产缓存
执行以下命令更新模块并刷新资产:./odoo-bin -u slnee_appointment_sale --database=你的数据库名或者在后台进入
设置 > 技术 > 资产,找到point_of_sale.assets并点击刷新资产。添加调试日志确认执行
在自定义JS文件开头添加日志,确认文件是否被执行:odoo.define('slnee_appointment_sale.CustomSaleOrderRow', function (require) { console.log('CustomSaleOrderRow 已加载'); // 剩余重写代码... });打开浏览器控制台,查看是否有该日志输出,判断文件是否被加载执行。
内容的提问来源于stack exchange,提问作者DZEUF
相关产品推荐
相关产品推荐

