我必须做一些完全错误的事情:
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');
});
我不确定我明白这一点。 define中的代码永远不会执行。我阅读了许多关于如何创建Widget等的文档和示例。但是文档从未解释过如何使用/调用这些放在'define'中的东西。
我也可以手动创建弹出窗口并将其添加到body元素中,但我想以odoo方式执行此操作。
答案 0 :(得分:1)
我听说你,我认为Odoo的js框架的秘密是许多人喜欢保守的秘密武器。我相信,如果你在过去的4年里一直在使用backbone,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。