2017-02-14 52 views
0

我必須做完全錯誤的東西:Odoo10 - 如何做的JavaScript

odoo.define('my_module.popups', function (require) { 
    'use strict'; 
    var ajax = require('web.ajax'); 
    var core = require('web.core'); 
    var _t = core._t; 
    var qweb = core.qweb; 
    ajax.loadXML('/my_module/static/xml/templates.xml', qweb); 

    var data = {modal_title: 'This is a popup!',modal_body: 'testtest'}; 
    var p = qweb.render("my_module.popup1_template", data); 
    p.prependTo('body'); 
}); 

我不知道我理解這一點。定義內的代碼從不執行。我閱讀了許多文檔和示例,瞭解如何創建Widget等。但文檔從未解釋如何使用/調用您放入'define'中的這些東西。

我也可以手動創建一個彈出窗口並將其預先添加到body元素,但我想這樣做odoo的方式。

+0

這個js文件在某個模板中引用了嗎?我的意思是腳本標記讓他的src指向你的文件。 – Majikat

+0

是的,該文件被正確引用 – user568021

+0

我剛剛發現代碼在ajax.loadXML行崩潰。 – user568021

回答

1

我聽到你說我認爲Odoo的js框架的祕密是很多人喜歡保留自己的祕密武器。我相信,如果你在過去的四年中一直使用骨幹,requirejs和下劃線,這一切都是顯而易見的。可悲的是,這不是我。

如果你看看/addons/web/static/src/js/widgets/notification.js中的通知模塊,你應該能夠看到他們在做什麼。有些東西可能會幫助你登錄,看你的腳本是否正在被加載,以及什麼時候被加載。對於你想要做的事情,你需要提供一些事件映射。我提到的文件中有一個例子。在你的jsmodule中,你將創建一個事件屬性看起來像這樣的對象。

events: { 
    'click .o_close': function(e) { 
     e.preventDefault(); 
     this.destroy(true); 
    }, 
    'hover .my_widget_class': function(e){ 
     // your code here 
    }, 
}, 

不要從字面上理解上述代碼。你需要一個事件觸發你的小部件在某個時刻被附加到dom。

+0

傷心。我從來沒有解決過這個問題,而是以舊時尚的方式做事。如果我查看代碼,我發現他們在另一個小部件中創建了一個小部件。好的,但我仍然不明白何時/如何/創建第一個小部件的位置。 ( – user568021

+0

)我打算在不久的將來用js框架做更多的事情,我做了一個很大的項目,所有的js都是定製的POS接口,所以我越來越好,但我同意,Odoo的js框架是完全處於記錄和低調的狀態,然而這方面的深厚知識的價值可能比對其他Odoo api的綜合知識更有價值。 –