2017-07-19 124 views
2

我正在学习为我的Odoo 10插件编写自定义JavaScript。如何处理DOM元素?

我已经写了下面的一段代码:

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

TIL'String.repeat(n)'! – msanford

回答

1

将脚本放在<body>标记的底部,以确保DOM在尝试操纵之前进行渲染。

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已经提供的功能,因为它的文档很差。)