0

我一定做错了什么:

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 里面的代码永远不会被执行。我阅读了许多关于如何创建小部件等的文档和示例。但是文档从未解释过如何使用/调用您放入“定义”中的这些内容。

我也可以手动创建一个弹出窗口并将其添加到 body 元素中,但我想以 odoo 方式执行此操作。

4

1 回答 1

1

我听到了,我认为 Odoo 的 js 框架的秘密是很多人喜欢保密的秘密武器。如果你在过去的 4 年里一直在使用主干、requirejs 和下划线,我相信这一切都是显而易见的。可悲的是那不是我。

如果您查看通知模块,/addons/web/static/src/js/widgets/notification.js您应该能够看到他们在做什么。一些可能对您有所帮助的事情是登录以查看您的脚本是否正在加载以及何时加载。对于您要执行的操作,您需要提供一些事件映射。我提到的文件中有一个例子。在您的 jsmodule 中,您将创建一个对象,该对象的 events 属性看起来像这样。

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

不要从字面上理解上面的代码。您需要一个触发您的小部件的事件在某个时候附加到 dom。

于 2017-02-14T15:43:11.863 回答