Odoo15中如何在页面完全加载后执行JavaScript脚本
Odoo V15 条码界面JS脚本延迟执行解决方案
针对你遇到的脚本执行早于元素渲染、无法选中导航栏按钮的问题,可通过以下几种Odoo原生适配的方法解决:
1. 监听Odoo全局就绪事件
Odoo前端框架提供了web.ready全局事件,确保页面核心元素加载完成后再执行代码:
odoo.define('your_module.barcode_nav_handler', function (require) { "use strict"; var core = require('web.core'); core.bus.on('web.ready', null, function () { // 此时页面元素已初始化完成 const targetBtn = $('.buttonClass'); console.log(targetBtn); targetBtn.on('click', function() { // 写入你的按钮点击逻辑 }); }); });
2. 动态元素的事件委托
如果导航栏按钮是异步渲染的,即使等待web.ready也可能无法直接选中,此时用事件委托绑定到父容器(选一个始终存在的父元素):
odoo.define('your_module.barcode_nav_handler', function (require) { "use strict"; var core = require('web.core'); core.bus.on('web.ready', null, function () { // 替换为导航栏实际的父容器选择器,比如o_barcode_header $('.o_barcode_header').on('click', '.buttonClass', function() { // 写入你的按钮点击逻辑 }); }); });
3. 确认Assets配置的正确性
确保你的脚本加载顺序在条码模块核心资源之后,在manifest.py中配置:
'assets': { 'barcode.assets': [ # 条码界面专属资源包,确保依赖加载完成 'your_module/static/src/js/barcode_script.js', ], },
如果是通用后端资源,也可使用web.assets_backend,但优先推荐绑定到条码模块的资源包,保证加载时机正确。
4. 自定义条码组件的生命周期钩子
如果你是扩展条码界面组件,可在组件的start方法中处理(组件渲染完成后触发):
odoo.define('your_module.custom_barcode_screen', function (require) { "use strict"; var BarcodeScreen = require('barcode.BarcodeScreen'); var core = require('web.core'); var CustomBarcodeScreen = BarcodeScreen.extend({ start: function () { this._super.apply(this, arguments); // 直接通过组件的$方法获取元素 this.$('.buttonClass').on('click', function() { // 写入你的按钮点击逻辑 }); return this._super(); }, }); core.ComponentRegistry.add('custom_barcode_screen', CustomBarcodeScreen); return CustomBarcodeScreen; });
内容的提问来源于stack exchange,提问作者tlelubre
相关产品推荐
相关产品推荐

