登记处¶
注册表是(有序的)键/值映射。它们是主要的 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事件。注册表是有序的:getAll方法返回根据序列号排序的值列表。- Registry.add(key, value[, options])¶
- 参数
key (
string()) – 新条目的密钥value (
any()) – 新条目的值options (
Object()) – 选项[options.force] (
boolean()) – 如果 key 已经存在则不要抛出[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()¶
- 返回
任何[]
返回注册表中所有元素的列表。它是按照序列号排序的。
- Registry.remove(key)¶
- 参数
key (
string()) – 应删除的条目的键
从注册表中删除键/值对。此操作会触发
UPDATE事件。
- Registry.category(subcategory)¶
- 参数
subcategory (
string()) – 子类别的名称
- 返回
登记处
返回与
subcategory关联的子注册表。如果尚不存在,则会动态创建子注册表。
参考文献列表¶
类别 |
内容 |
|---|---|
实现所有可用的效果 |
|
用于格式化值的实用函数(主要用于字段值) |
|
顶级组件 |
|
解析值的实用函数(主要用于字段值) |
|
应激活的所有服务 |
|
显示在导航栏系统托盘区域中的组件 |
|
用户菜单中显示的菜单项(导航栏右上角) |
效果注册表¶
effects 注册表包含所有可用效果的实现。有关更多详细信息,请参阅 effect service 部分。
格式化程序注册表¶
formatters 注册表包含格式化值的函数。每个格式化程序都有以下 API:
- format(value[, options])¶
- 参数
value (
T | false()) – 特定类型的值,如果未给出值,则为falseoptions (
Object()) – 各种选择
- 返回
细绳
格式化一个值并返回一个字符串
其他资料
主要组件注册表¶
主组件注册表 (main_components) 对于在 Web 客户端中添加顶级组件非常有用。 Web 客户端有一个 MainComponentsContainer 作为直接子级。该组件基本上是在主组件注册表中注册的组件有序列表的实时表示。
- 应用程序编程接口
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 框架激活的所有 services。
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):应该给予组件的道具isDisplayed (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。如果给出,该数字将用于订购商品。在系统托盘菜单中,最低序列位于右侧,最高序列位于左侧。