我正在学习为我的Odoo 10插件编写自定义JavaScript。
我写了以下代码:
odoo.define('ioio.io', function(require) {
'use strict'
const e = $('div.o_sub_menu_footer')
console.log('--testing--'.repeat(7))
console.log(e)
// the "Powered by Odoo" down the secondary menu
e.remove()
})
代码很好,我可以在控制台中看到我的测试字符串
但是,如果在目标div
之前加载此代码,则e
为空/尚未填充,因此其内容不会被删除。
从控制台手动完成。
我的问题是这样做的正确方法是什么?以及如何准确知道代码何时执行?
答案 0 :(得分:2)
你可以
答案 1 :(得分:1)
将脚本放在<body>
标记的底部,以确保DOM在尝试操作之前呈现。
答案 2 :(得分:0)
这是一个Odoo特定问题,因此您应该使用Odoo标准方式,即通过其base
JS类。该类包含ready()
方法,可以完全满足您的需要。
在您的情况下,要使用该功能,您需要先要求该类。然后你可以使用ready()
。
更新代码,它应如下所示:
odoo.define('ioio.io', function(require) {
'use strict'
// require base class
var base = require('web_editor.base');
//use its ready method
base.ready().done(function () {
// put all the code you want to get loaded
// once the DOM is loaded within this block
const e = $('div.o_sub_menu_footer')
console.log('--testing--'.repeat(7))
console.log(e)
// the "Powered by Odoo" down the secondary menu
e.remove()
});
})
虽然您接受的答案会导致相同的结果,但您可能希望将其更新为此答案,因为这是Odoo方式。通常建议尽可能在Odoo框架内工作,并仅在真正需要时进行自定义。 (虽然由于文档很差,很难了解Odoo已经提供了哪些功能。)