2017-07-19 105 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已經提供的功能,因爲它的文檔很差。)