Odoo 14如何重定义OWL js 及重写board_view.js的_saveDashboard方法
Odoo14社区版重写board模块_saveDashboard函数操作步骤
1. 准备自定义模块基础
首先创建自定义Odoo模块,在模块的__manifest__.py中声明依赖board模块,确保自定义资源加载顺序晚于原生board模块:
# __manifest__.py 片段 'depends': ['base', 'board'],
2. 注册静态资源
在自定义模块下新建static/src/js/custom_board_view.js文件,同时新建views/assets.xml文件,将自定义JS注入后端资源包:
<!-- views/assets.xml 内容 --> <odoo> <template id="custom_board_assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <script type="text/javascript" src="/你的模块名/static/src/js/custom_board_view.js"/> </xpath> </template> </odoo>
同时在__manifest__.py的data列表中引入views/assets.xml。
3. 编写重写逻辑
Odoo14使用include方法即可对原生组件的方法进行重写,不需要完全替换组件,custom_board_view.js代码示例如下:
odoo.define('你的模块名.CustomBoardView', function (require) { "use strict"; // 引入原生board视图组件 const BoardView = require('board.BoardView'); const BoardController = BoardView.prototype.config.Controller; BoardController.include({ _saveDashboard: function () { // 若需要保留原有逻辑,保留本行,不需要则删除 this._super.apply(this, arguments); // 此处编写你的自定义逻辑 console.log('自定义_saveDashboard方法执行'); // 你的业务代码... } }); });
4. 生效验证
- 升级你的自定义模块
- 清空浏览器缓存和Odoo服务端静态资源缓存
- 进入仪表盘页面触发保存操作,验证自定义逻辑是否正常执行
注意事项
- 如果需要完全覆盖原生逻辑,删除
this._super.apply(this, arguments)即可 - 必须确保自定义模块依赖
board,否则会出现组件未定义的报错 - 不要修改Odoo原生模块的代码,所有自定义逻辑都写在你自己的模块中
内容的提问来源于stack exchange,提问作者Shivam Kachhia
相关产品推荐
相关产品推荐

