Реєстри

Реєстри - це (впорядковані) карти ключ/значення. Вони є основними точками розширення веб-клієнта: багато функцій, що надаються фреймворком Odoo javascript, просто шукають у реєстрі щоразу, коли йому потрібне визначення для певного об’єкта (наприклад, полів, представлень, дій клієнта або служб). Налаштування веб-клієнта потім виконується шляхом додавання певних значень до відповідного реєстру.

import { Registry } from "@web/core/registry";

const myRegistry = new Registry();

myRegistry.add("hello", "odoo");

console.log(myRegistry.get("hello"));

Корисною особливістю реєстрів є те, що вони підтримують набір підреєстрів, отриманих методом category. Якщо підреєстр ще не існує, він створюється на льоту. Усі реєстри, що використовуються веб-клієнтом, отримуються таким чином з одного кореневого реєстру, експортованого в @web/core/registry.

import { registry } from "@web/core/registry";

const fieldRegistry = registry.category("fields");
const serviceRegistry = registry.category("services");
const viewRegistry = registry.category("views");

API реєстру

class Registry()

Створює новий реєстр. Зверніть увагу, що реєстр є шиною подій, тому за потреби можна прослухати подію UPDATE. Реєстри впорядковані: метод getAll повертає список значень, упорядкованих за їх порядковим номером.

Registry.add(key, value[, options])
Аргументи
  • key (string()) – ключ для нового запису

  • value (any()) – значення для нового запису

  • options (Object()) – options

  • [options.force] (boolean()) – не викидати, якщо ключ вже існує

  • [options.sequence] (number()) – порядковий номер (корисний для впорядкування записів)

Повертає

Реєстр

Вставляє значення в певну позицію. Якщо ключ вже використовується, цей метод виводить помилку (якщо опція force не встановлена в значення true). Опція sequence корисна для вставки значення в певну позицію. Цей метод також запускає подію UPDATE.

Повертає той самий реєстр, тому виклики методу add можна об’єднувати в ланцюжок.

Registry.get(key[, defaultValue])
Аргументи
  • key (string()) – ключ для входу

  • any (defaultValue()) – повернене значення, якщо запис для ключа не існує

Повертає значення, що відповідає аргументу key. Якщо реєстр не містить цього ключа, цей метод повертає defaultValue, якщо воно задане, або викидає помилку в іншому випадку.

Registry.contains(key)
Аргументи
  • key (string()) – ключ для входу

Повертає

boolean

Повертає true, якщо ключ присутній у реєстрі

Registry.getAll()
Повертає

any[]

Повертає список усіх елементів реєстру. Він впорядкований відповідно до порядкових номерів.

Registry.remove(key)
Аргументи
  • key (string()) – ключ для запису, який слід видалити

Видаляє пару ключ/значення з реєстру. Ця операція запускає подію UPDATE.

Registry.category(subcategory)
Аргументи
  • subcategory (string()) – назва підкатегорії

Повертає

Реєстр

Повертає підреєстр, пов’язаний з subcategory. Якщо він ще не існує, підреєстр створюється на льоту.

Список посилань

Категорія

Вміст

effects

реалізація для всіх доступних ефектів

formatters

допоміжні функції для форматування значень (здебільшого використовуються для значень полів)

main_components

компоненти верхнього рівня

parsers

допоміжні функції для розбору значень (здебільшого використовуються для значень полів)

services

усі послуги, які потрібно активувати

systray

компоненти, що відображаються в зоні системного трея на панелі навігації

user_menuitems

пункти меню, що відображаються в меню користувача (угорі праворуч на панелі навігації)

Реєстр ефектів

Реєстр effects містить реалізації всіх доступних ефектів. Див. розділ про effect service для отримання додаткової інформації.

Реєстр форматування

Реєстр formatters містить функції для форматування значень. Кожен форматтер має такий API:

format(value[, options])
Аргументи
  • value (T | false()) – значення певного типу або false, якщо значення не вказано

  • options (Object()) – різні опції

Повертає

string

Форматує значення та повертає рядок

Перегляньте також

Реєстр основних компонентів

Реєстр основних компонентів (main_components) корисний для додавання компонентів верхнього рівня у веб-клієнт. Веб-клієнт має MainComponentsContainer як прямий дочірній компонент. Цей компонент, по суті, є живим представленням упорядкованого списку компонентів, зареєстрованих у реєстрі основних компонентів.

API
interface {
    Component: Owl Component class
    props?: any
}

Наприклад, компонент LoadingIndicator можна додати до реєстру ось так:

registry.category("main_components").add("LoadingIndicator", {
  Component: LoadingIndicator,
});

Реєстр парсера

Реєстр parsers містить функції для розбору значень. Кожен парсер має такий API:

parse(value[, options])
Аргументи
  • value (string()) – рядок, що представляє значення

  • options (Object()) – різні опції (залежно від парсера)

Повертає

T – дійсне значення

Розбирає рядок і повертає значення. Якщо рядок не є коректним значенням, парсери можуть завершити роботу та видавати помилки.

Перегляньте також

Реєстр послуг

Реєстр сервісів (категорія: services) містить усі services, які має активувати фреймворк Odoo.

import { registry } from "@web/core/registry";

const myService = {
    dependencies: [...],
    start(env, deps) {
        // some code here
    }
};

registry.category("services").add("myService", myService);

Реєстр системного трея

Системний трей - це зона праворуч від панелі навігації, яка містить різні невеликі компоненти, що зазвичай відображають певну інформацію (наприклад, кількість непрочитаних повідомлень), сповіщення та/або дозволяють користувачеві взаємодіяти з ними.

Реєстр systray містить опис цих елементів системного лотка як об’єктів з такими трьома ключами:

  • Component: клас компонента, що представляє елемент. Його кореневим елементом має бути тег <li>, інакше він може бути неправильно стилізований.

  • властивості (необов'язково): властивості, які слід надати компоненту

  • isDisplayed (необов'язково): функція, яка приймає env та повертає логічне значення. Якщо значення true, елемент системного лотка відображається. В іншому випадку він видаляється.

Наприклад:

import { registry } from "@web/core/registry";

class MySystrayItem extends Component {
    // some component ...
}

registry.category("systray").add("myAddon.myItem", {
    Component: MySystrayItem,
});

Реєстр системного трея є впорядкованим реєстром (з порядковим номером):

const item = {
    Component: MySystrayItem
};
registry.category("systray").add("myaddon.some_description", item, { sequence: 43 });

Порядковий номер за замовчуванням дорівнює 50. Якщо його вказано, цей номер буде використано для впорядкування елементів. Найнижчий номер послідовності знаходиться праворуч, а найвищий - ліворуч у меню системного трея.

Реєстр меню користувача

Реєстр меню користувача (категорія: user_menuitems) містить усі елементи меню, які відображаються під час відкриття меню користувача (елемент navbar з іменем користувача, у верхньому правому куті).

Елементи меню користувача визначаються функцією, яка приймає env та повертає простий об’єкт, що містить таку інформацію:

  • description: текст пункту меню,

  • href: (необов’язково) якщо задано (і є правдивим), текст елемента поміщається в тег a із заданим атрибутом href,

  • callback: зворотний виклик для виклику, коли елемент вибрано,

  • hide: (необов’язково) вказує, чи слід приховати елемент (за замовчуванням: false),

  • sequence: (необов’язково) визначає ранг елемента серед інших елементів випадаючого списку (за замовчуванням: 100).

Меню користувача викликає всі функції, що визначають елементи, щоразу, коли його відкривають.

Приклад:

import { registry } from "@web/core/registry";

registry.category("user_menuitems").add("my item", (env) => {
    return {
        description: env._t("Technical Settings"),
        callback: () => { env.services.action_manager.doAction(3); },
        hide: (Math.random() < 0.5),
    };
});