Функция `` odoo.define``

Официальный документ о теме здесь:

Javascript Module in odoo is some piece of code declared via odoo.define('js_module_name', ...) and can be used in other modules via require('js_module_name').

Пример:

odoo.define('js_module_name', function (require) {
  "use strict";
  var A = require('js_module_name_A');
  var B = require('js_module_name_B');
  require('js_module_name_C');

  // some code
  return something;
});

Предупреждение

Вы не можете переименовать переменную `` require``.

Примечание

В одном файле может быть несколько * JS-модулей *, хотя рекомендуется помещать их в разные файлы

Примечание

Вы можете использовать любую строку в качестве имени модуля, но рекомендуется использовать `` <ODOO_MODULE> , <JS_MODULE> , например `` point_of_sale.popups

Возвращаемое значение

JS-модуль может возвращать значение. Это значение может быть использовано в других js-модулях (того же odoo-модуля или других).

Например:

odoo.define('point_of_sale.gui', function (require) {
  "use strict";
    return {
      Gui: Gui,
      define_screen: define_screen,
      define_popup: define_popup,
        };
});

Затем мы можем использовать `` define_screen`` следующим образом:

odoo.define('point_of_sale.screens', function (require) {
  "use strict";
    var gui = require('point_of_sale.gui');
    //...
      gui.define_screen({
      name: 'scale',
      widget: ScaleScreenWidget
      });
    // ..
      return ....
})

Примечание

Если вы не используете значение, возвращаемое другим js-модулем, вы все равно можете * импортировать js-module * (через require (….)), чтобы убедиться, что этот модуль загружен перед выполнением вашего модуля.

Асинхронные модули

Может случиться так, что модуль должен выполнить некоторую работу, прежде чем он будет готов. Например, он может сделать RPC для загрузки некоторых данных. В этом случае модуль может просто вернуть отложенное (обещание). В этом случае система модулей просто будет ждать завершения отсроченного перед регистрацией модуля.

odoo.define('module.Something', function (require) {
  "use strict";
    var ajax = require('web.ajax');
      return ajax.rpc(...).then(function (result) {
      // some code here
    return something;
  });
});