如何处理DOM元素?

时间:2017-07-19 19:38:17

标签: javascript openerp odoo-9 odoo-10

我正在学习为我的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为空/尚未填充,因此其内容不会被删除。
从控制台手动完成。

我的问题是这样做的正确方法是什么?以及如何准确知道代码何时执行?

3 个答案:

答案 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已经提供了哪些功能。)