注册表¶
注册表是(有序的)键/值映射。它们是Odoo JavaScript框架提供的许多功能的主要Web客户端扩展点:每当它需要某个对象(例如字段、视图、客户端操作或服务)的定义时,它就会简单地查找注册表。然后,通过在正确的注册表中添加特定值来定制Web客户端。
import { Registry } from "@web/core/registry";
const myRegistry = new Registry();
myRegistry.add("hello", "odoo");
console.log(myRegistry.get("hello"));
registries 的一个有用特性是它们维护了一组子 registries,通过 category
方法获得。如果子 registry 还不存在,它会在运行时创建。所有 web 客户端使用的 registries 都是从一个根 registry 中获得的,该根 registry 导出在 @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()¶
Creates a new registry. Note that a registry is an event bus, so one can listen to the
UPDATE
event if necessary. Registries are ordered: thegetAll
method returns a list of values ordered according to their sequence number.- 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
相关联的子注册表。如果尚不存在,则会即时创建子注册表。
参考列表¶
分类 |
内容 |
---|---|
所有可用效果的实现 |
|
格式化值的实用函数(主要用于字段值) |
|
顶级组件 |
|
用于解析值的实用函数(主要用于字段值) |
|
应该被激活的所有服务 |
|
在导航栏中显示在系统托盘区域的组件 |
|
在用户菜单中显示的菜单项(位于导航栏的右上角) |
特效注册表¶
The effects
registry contains the implementations of all available effects.
See the section on the effect service
for more details.
格式化程序注册表¶
The formatters
registry contains functions to format values. Each formatter
has the following API:
- format(value[, options])¶
- 参数
value (
T | false()
) – 一个特定类型的值,如果没有给出值则为false
options (
Object()
) – 各种选项
- 返回
字符串
格式化一个值并返回一个字符串
另请参阅
主要组件注册表¶
The main component registry (main_components
) is useful for adding top level
components in the web client. The webclient has a MainComponentsContainer
as
direct child. This component is basically a live representation of the ordered
list of components registered in the main components registry.
- API
interface { Component: Owl Component class props?: any }
例如,可以像这样将 LoadingIndicator
组件添加到注册表中:
registry.category("main_components").add("LoadingIndicator", {
Component: LoadingIndicator,
});
解析器注册表¶
The parsers
registry contains functions to parse values. Each parser
has the following API:
- parse(value[, options])
- 参数
value (
string()
) – 表示值的字符串options (
Object()
) – 各种选项(特定于解析器)
- 返回
请输入有效值
解析字符串并返回一个值。如果字符串不表示有效的值,则解析器可能会失败并抛出错误。
另请参阅
服务注册表¶
服务注册表(类别: services
)包含所有应由Odoo框架激活的 services 。
import { registry } from "@web/core/registry";
const myService = {
dependencies: [...],
start(env, deps) {
// some code here
}
};
registry.category("services").add("myService", myService);
系统托盘注册表¶
系统托盘是导航栏右侧的区域,包含各种小组件,通常显示某种类型的信息(例如未读消息数量),通知和/或让用户与它们交互。
The systray
registry contains a description of these systray items, as objects
with the following three keys:
Component
: 组件类,代表该项。其根元素应为<li>
标签,否则可能无法正确应用样式。props (optional)
: props that should be given to the componentisDisplayed (optional)
: a function that takes the env and returns a boolean. If true, the systray item is displayed. Otherwise it is removed.
例如:
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。如果提供了序列号,将用于对项目进行排序。序列号越小,在系统托盘菜单中的位置越靠右,序列号越大,在系统托盘菜单中的位置越靠左。