注冊表?
注冊表是(有序的)鍵/值映射。它們是Odoo JavaScript框架提供的許多功能的主要Web客戶端擴展點:每當它需要某個對象(例如字段、視圖、客戶端操作或服務)的定義時,它就會簡單地查找注冊表。然后,通過在正確的注冊表中添加特定值來定制Web客戶端。
import { Registry } from "@web/core/registry";
const myRegistry = new Registry();
myRegistry.add("hello", "odoo");
console.log(myRegistry.get("hello"));
注冊表的一個有用特性是它們維護一組子注冊表,可以通過 category
方法獲得。如果子注冊表尚不存在,則會動態創建。所有由 Web 客戶端使用的注冊表都是從一個根注冊表中以這種方式獲得的,該根注冊表在 @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”事件。注冊表是有序的: :js
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
注冊表包含所有可用效果的實現。有關更多詳細信息,請參見 effect service 部分。
格式化程序注冊表?
formatters
注冊表包含格式化值的函數。每個格式化器都有以下 API:
- format(value[, options])?
- 參數
value (
T | false()
) – 一個特定類型的值,如果沒有給出值則為false
options (
Object()
) – 各種選項
- 返回
字符串
格式化一個值并返回一個字符串
另請參閱
主要組件注冊表?
主組件注冊表( main_components
)可用于在 Web 客戶端中添加頂級組件。Web 客戶端具有 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()
) – 各種選項(特定于解析器)
- 返回
請輸入有效值
解析字符串并返回一個值。如果字符串不表示有效的值,則解析器可能會失敗并拋出錯誤。
另請參閱
服務注冊表?
服務注冊表(類別: 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>
標簽,否則可能無法正確應用樣式。props(可選)
: 應該傳遞給組件的屬性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。如果提供了序列號,將用于對項目進行排序。序列號越小,在系統托盤菜單中的位置越靠右,序列號越大,在系統托盤菜單中的位置越靠左。