注册表¶
注册表是(有序的)键/值映射。它们是 Web 客户端的主要扩展点:Odoo JavaScript 框架提供的许多功能在需要某个对象的定义时(例如字段、视图、客户端动作或服务),只需在注册表中查找即可。因此,定制 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事件。注册表是有序的::jsgetAll方法返回按序号排序的值列表。- Registry.add(key, value[, options])¶
- 参数
key (
string()) – 新条目的键value (
any()) – 新条目的值options (
Object()) – 选项[options.force] (
boolean()) – 如果键已存在则不抛出异常[options.sequence] (
number()) – 序号(用于对条目排序)
- 退货
Registry
在指定键处插入一个值。如果该键已被使用,此方法会抛出错误(除非将
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()) – 子类别的名称
- 退货
Registry
返回与
subcategory关联的子注册表。如果它尚不存在,则会即时创建该子注册表。
参考列表¶
类别 |
内容 |
|---|---|
所有可用效果的实现 |
|
用于格式化值的工具函数(主要用于字段值) |
|
顶层组件 |
|
用于解析值的工具函数(主要用于字段值) |
|
所有应被激活的服务 |
|
显示在导航栏系统托盘区域中的组件 |
|
显示在用户菜单中的菜单项(导航栏右上角) |
效果注册表¶
effects 注册表包含所有可用效果的实现。更多细节请参阅 效果服务 一节。
格式化器注册表¶
formatters 注册表包含用于格式化值的函数。每个格式化器具有以下 API:
- format(value[, options])¶
- 参数
value (
T | false()) – 特定类型的值,如果未提供值则为falseoptions (
Object()) – 各种选项
- 退货
string
格式化一个值并返回字符串
更多内容
主组件注册表¶
主组件注册表(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()) – 各种选项(特定于解析器)
- 退货
T 一个有效值
解析字符串并返回一个值。如果字符串不能表示有效值,解析器可能会失败并抛出错误。
更多内容
服务注册表¶
服务注册表(类别: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 (optional):应传递给组件的 propsisDisplayed (optional):一个接受 env 并返回布尔值的函数。如果为 true,则显示该系统托盘项。否则将其移除。
例如:
import { registry } from "@web/core/registry";
class MySystrayItem extends Component {
// some component ...
}
registry.category("systray").add("myAddon.myItem", {
Component: MySystrayItem,
});
系统托盘注册表是一个有序注册表(带有 sequence 序号):
const item = {
Component: MySystrayItem
};
registry.category("systray").add("myaddon.some_description", item, { sequence: 43 });
序号默认为 50。如果指定了序号,将使用该数字对各项排序。在系统托盘菜单中,序号最小的一项位于最右侧,序号最大的一项位于最左侧。