注册表¶
注册表是(有序的)键/值映射。它们是 Odoo JavaScript 框架的主要扩展点:当框架需要某个对象(如字段、视图、客户端操作或服务)的定义时,许多功能都会查找注册表。因此,自定义 Web 客户端只需在正确的注册表中添加特定值即可。
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
,此方法将返回defaultValue
,否则会抛出错误。
- Registry.contains(key)¶
- 参数
key (
string()
) – 条目对应的键
- 返回
布尔值
如果
key
存在于注册表中,则返回true
- Registry.getAll()¶
- 返回
任何[]
返回注册表中所有元素的列表。它根据序列号进行排序。
- Registry.remove(key)¶
- 参数
key (
string()
) – 要删除的条目对应的键
从注册表中移除一个键/值对。此操作会触发一个
UPDATE
事件。
- Registry.category(subcategory)¶
- 参数
subcategory (
string()
) – 子类别的名称
- 返回
注册表
返回与
subcategory
关联的子注册表。如果该子注册表尚不存在,将即时创建它。
参考列表¶
类别 |
内容 |
---|---|
所有可用效果的实现 |
|
用于格式化值的实用函数(主要用于字段值) |
|
顶级组件 |
|
用于解析值的实用函数(主要用于字段值) |
|
所有应激活的服务 |
|
导航栏中系统托盘区域显示的组件 |
|
用户菜单中显示的菜单项(导航栏右上角) |
效果注册表¶
effects
注册表包含所有可用效果的实现。有关更多详细信息,请参阅关于 效果服务 的部分。
格式化程序注册表¶
formatters
注册表包含用于格式化值的函数。每个格式化器具有以下接口:
- format(value[, options])¶
- 参数
value (
T | false()
) – 特定类型的值,或者如果没有提供值则为false
options (
Object()
) – 各种选项
- 返回
字符串
格式化一个值并返回字符串
另请参见
主组件注册表¶
主组件注册表(main_components
)用于在 Web 客户端中添加顶级组件。Web 客户端有一个 MainComponentsContainer
作为直接子组件。该组件基本上是对主组件注册表中注册的组件顺序列表的实时表示。
- 接口
interface { Component: Owl Component class props?: any }
例如,可以像这样将 LoadingIndicator
组件添加到注册表中:
registry.category("main_components").add("LoadingIndicator", {
Component: LoadingIndicator,
});
解析器注册表¶
parsers
注册表包含用于解析值的函数。每个解析器具有以下接口:
- 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 (可选)
: 应传递给组件的属性isDisplayed (可选)
: 一个函数,接收 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。如果提供了该数字,将用于对项目进行排序。在系统托盘菜单中,最小的序号位于右侧,最大的序号位于左侧。