Registries

رجیستری‌ها نگاشت‌های (مرتب) کلید/مقدار هستند. آن‌ها نقاط اصلی توسعهٔ کلاینت وب هستند: بسیاری از ویژگی‌های ارائه‌شده توسط چارچوب javascript Odoo هر زمان به تعریف یک شیء (مانند فیلدها، نماها، اقدامات کلاینت یا سرویس‌ها) نیاز داشته باشند، صرفاً در یک رجیستری جستجو می‌کنند. در نتیجه، سفارشی‌سازی کلاینت وب صرفاً با افزودن مقادیر مشخص به رجیستری درست انجام می‌شود.

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.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()) -- کلید ورودی

بازگشت ها

بولی

اگر key در رجیستری حضور داشته باشد true بازمی‌گرداند

Registry.getAll()
بازگشت ها

any[]

فهرست تمام عناصر رجیستری را بازمی‌گرداند. این فهرست بر اساس شماره‌های توالی مرتب شده است.

Registry.remove(key)
نشانوندها
  • key (string()) -- کلید ورودی‌ای که باید حذف شود

یک جفت کلید/مقدار را از رجیستری حذف می‌کند. این عملیات یک رویداد UPDATE فعال می‌کند.

Registry.category(subcategory)
نشانوندها
  • subcategory (string()) -- نام زیرمجموعه

بازگشت ها

رجیستری

زیررجیستری مرتبط با subcategory را بازمی‌گرداند. اگر هنوز وجود نداشته باشد، زیررجیستری در لحظه ایجاد می‌شود.

فهرست مرجع

دسته‌بندی

محتوا

effects

پیاده‌سازی برای تمام افکت‌های موجود

formatters

توابع کمکی برای قالب‌بندی مقادیر (بیشتر برای مقادیر فیلد استفاده می‌شوند)

main_components

کامپوننت‌های سطح بالا

parsers

توابع کمکی برای تجزیهٔ مقادیر (بیشتر برای مقادیر فیلد استفاده می‌شوند)

services

تمام سرویس‌هایی که باید فعال شوند

systray

کامپوننت‌های نمایش‌داده‌شده در منطقهٔ systray در navbar

user_menuitems

آیتم‌های منو نمایش‌داده‌شده در منوی کاربر (بالا-راست navbar)

رجیستری افکت

رجیستری 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,
});

رجیستری Parser

رجیستری parsers شامل توابعی برای تجزیهٔ مقادیر است. هر parser این API را دارد:

parse(value[, options])
نشانوندها
  • value (string()) -- رشته‌ای که نمایانگر یک مقدار است

  • options (Object()) -- گزینه‌های مختلف (مختص parser)

بازگشت ها

T یک مقدار معتبر

یک رشته را تجزیه کرده و یک مقدار برمی‌گرداند. اگر رشته نمایانگر یک مقدار معتبر نباشد، parserها می‌توانند با خطا متوقف شوند.

همچنین ببینید

رجیستری سرویس

رجیستری سرویس (دسته: services) شامل تمام سرویس‌هایی است که باید توسط چارچوب Odoo فعال شوند.

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

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

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

رجیستری Systray

systray منطقه‌ای در سمت راست navbar است که شامل کامپوننت‌های کوچک گوناگون است و معمولاً نوعی اطلاعات (مانند تعداد پیام‌های خوانده‌نشده) و اعلان‌ها را نمایش می‌دهد و/یا به کاربر اجازهٔ تعامل با آن‌ها را می‌دهد.

رجیستری systray حاوی توصیفی از این آیتم‌های systray به‌صورت اشیائی با سه کلید زیر است:

  • Component: کلاس کامپوننتی که نمایانگر آیتم است. عنصر ریشهٔ آن باید یک تگ <li> باشد، در غیر این صورت ممکن است به‌درستی استایل نگیرد.

  • props (اختیاری): propهایی که باید به کامپوننت داده شوند

  • isDisplayed (اختیاری): تابعی که env را می‌گیرد و یک بولین بازمی‌گرداند. اگر true باشد، آیتم systray نمایش داده می‌شود. در غیر این صورت حذف می‌شود.

برای مثال:

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

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

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

رجیستری systray یک رجیستری مرتب است (با شمارهٔ sequence):

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

شمارهٔ توالی به‌طور پیش‌فرض ۵۰ است. در صورت ارائه، این شماره برای مرتب‌سازی آیتم‌ها استفاده می‌شود. کمترین توالی در سمت راست و بیشترین توالی در سمت چپ منوی systray قرار می‌گیرد.

رجیستری منوی کاربر

رجیستری منوی کاربر (دسته: user_menuitems) شامل تمام آیتم‌های منویی است که هنگام باز کردن منوی کاربر (عنصر navbar حاوی نام کاربر، در بالا-راست) نمایش داده می‌شوند.

آیتم‌های منوی کاربر با تابعی تعریف می‌شوند که env را می‌گیرد و یک شیء ساده شامل اطلاعات زیر بازمی‌گرداند:

  • description : متن آیتم منو،

  • href : (اختیاری) در صورت ارائه (و truthy بودن)، متن آیتم در یک تگ a با ویژگی href داده‌شده قرار می‌گیرد،

  • callback : callbackی که هنگام انتخاب آیتم فراخوانی می‌شود،

  • hide: (اختیاری) نشان می‌دهد آیا آیتم باید پنهان باشد (پیش‌فرض: false

  • sequence: (اختیاری) رتبهٔ آیتم را در میان آیتم‌های dropdown دیگر تعیین می‌کند (پیش‌فرض: ۱۰۰).

منوی کاربر هر بار که باز می‌شود تمام توابع تعریف‌کنندهٔ آیتم‌ها را فرامی‌خواند.

مثال:

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),
    };
});