2

我正在使用 Odoo 11遵循Building Interface Extensions 指南。

指南中指出,

在 Odoo web 中,模块被声明为在全局 odoo 变量上设置的函数。该函数的名称必须与插件(在本例中为 oepetstore)相同,以便框架可以找到它并自动初始化它。

但是我的模块没有被初始化,我收到以下错误:

操作错误 - 找不到客户端操作“petstore.homepage”。

我在模块中添加了一些日志记录,我发现浏览器正在获取文件,正如预期的那样,但初始化没有发生。

这是我的 JS 文件:

odoo.oepetstore = function(instance, local) {
    console.log('Started odoo.oepetstore'); ////////// [1] - This never runs
    
    local.HomePage = instance.Widget.extend({
        template: 'HomePageTemplate',
        start: function() {
            this.$el.append($('<div>').text('Hello dear Odoo user!'));
        }
    });
    
    instance.web.client_actions.add('petstore.homepage', 'instance.oepetstore.HomePage');
}
console.log('Loaded petstore.js'); ////////// [2] - This always runs

使用 Odoo 9(在将文件重命名__manifest__.py__openerp__.py并将变量重命名odoo为之后openerp),一切都按预期工作。

为什么它不能与 Odoo 11 一起使用?


编辑

这是我遵循Tchi-Odoo 的回答后的工作代码:

odoo.define('PetStoreHomePage', function(require){
    "use strict";

    var core = require('web.core');
    var Widget = require('web.Widget');

    var HomePageWidget = Widget.extend({
        template: 'HomePageTemplate',
        start: function() {
            this.$el.append($('<div>').text('Hello dear Odoo user!'));
        }
    });

    core.action_registry.add('petstore.homepage', HomePageWidget);
});

4

1 回答 1

3

在新版本的 odoo 中,当您定义 javascript 模块时,请使用:

              // key of your module so other require it.
  odoo.define('your_module_name.name_to_discript_functionality', function(require) {
    'use strict'
     // user require to load module that your module depends on them
     var web = require('web.code');
     // if someone need your module function he will load it by it's key 
     // var YouModule = require('your_module_name.name_to_discript_functionality');



    // if you define new class return them so other can use them
    return {
        NewClass : NewClass,
        ...
        ...
    }

  });
于 2017-10-31T07:58:42.783 回答