注册表是(有序的)键/值映射。它们是网络客户端的主要扩展点:Odoo javascript 框架提供的许多功能只需在需要某些对象(如字段、视图、客户端操作或服务)的定义时查找注册表。然后,只需在正确的注册表中添加特定值,即可定制网络客户端。
import { Registry } from "@web/core/registry";
const myRegistry = new Registry();
myRegistry.add("hello", "odoo");
console.log(myRegistry.get("hello"));
注册表的一个有用功能是维护一组子注册表,这些子注册表通过类别方法获得。如果子注册表还不存在,则会即时创建。网络客户端使用的所有注册表都是从 @web/core/registry 中导出的一个根注册表中获取的。
import { registry } from "@web/core/registry";
const fieldRegistry = registry.category("fields");
const serviceRegistry = registry.category("services");
const viewRegistry = registry.category("views");
Registry API
class Registry()
创建一个新注册表。请注意,注册表是一个事件总线,因此如有必要,可以监听 UPDATE 事件。注册表是有序的:getAll 方法会返回一个按序列号排序的值列表。
Registry.add(key, value[, options])
参数
key (string())- 新条目关键字value (any()) - 新条目值
options (Object()) - 选项
[options.force] (boolean()) - 如果键已存在则不抛出
[options.sequence] (number()) - 序列号(用于对条目进行排序)
返回 Registry
在特定键值处插入一个值。如果键值已被使用,该方法会出错(除非选项 force 设为 true)。选项 sequence 用于在特定位置插入值。该方法还会触发 UPDATE 事件。
会返回相同的注册表,因此添加方法可以链式调用。
Registry.get(key[, defaultValue])
返回键参数对应的值。如果注册表中不包含该键,该方法会返回 defaultValue(如果给定),否则会出错。
Registry.contains(key)
如果注册表中存在密钥,则返回 true
Registry.getAll()
返回注册表中所有元素的列表。该列表根据序列号排序。
Registry.remove(key)
从注册表中删除键/值对。此操作会触发 UPDATE 事件。
Registry.category(subcategory)
返回与子类别相关的子注册表。如果子注册表不存在,则会即时创建。
参考目录
Category | Content |
---|---|
实现所有可用效果 | |
格式化数值的实用功能(主要用于字段值) | |
顶级组件 | |
解析数值的实用功能(主要用于字段值) | |
所有应激活的服务 | |
导航栏系统盘区显示的组件 | |
用户菜单(导航栏右上角)中显示的菜单项 |
上一篇 odoo17开发教程(18):patch的用法简介_odoo patch打补丁的方法是会同时存在的吗?-CSDN博客
下一篇 odoo17开发教程(20):odoo js框架里的systray注册表和usermenu注册表详解_odoo owl systray-CSDN博客