注册表
注册表是 Echo-Live 集中管理数据的一项机制。
机制
注册表名
注册表的名称包含命名空间,使用冒号 :
分隔命名空间与名称,如未指定命名空间将会自动指定命名空间为 echolive
。
键值
注册表中的每一个项目都有一个在当前表中唯一的键名,如果对同一个键值重复写入,将会触发覆写机制。此外,一些注册表含有隐性默认值,对这些注册表的键值初次写入也会触发覆写机制。
值的类型必须可被转换为 JSON,否则会被忽略。
如果值包含循环引用将会引发错误。
值的覆写
原始值与写入值类型类型不同时,将会直接覆盖。
当原始值与写入值类型相同时:
- 如果类型为 Object,写入值将会与原始值深度合并,其中嵌套的值也遵循覆写规则;
- 如果类型为 Array,写入值将会添加至原始值末尾;
- 其他类型则直接覆盖。
特殊注册表
一些注册表具有特殊功能:
root
这是整个命名空间的根注册表,该注册表可以为当前命名空间中的所有注册表提供默认值。
例如有一个 example:test
注册表,它在设置值时会尝试从 example:root
读取默认值。
如果 example:root
中的注册表数据指定了继承的注册表(即填写了 inherit
字段),则会尝试读取被继承的注册表的默认值,后续的继承以此类推。
运行流程
注册表的运行流程分为以下几个阶段:
- 实例化 ——
EchoLiveRegistry
类实例化,创建echolive:root
注册表。 - 初始化 —— 导入
echolive:root
注册表,创建固有注册表,完成初始化。 - 导入注册表 —— 导入其余注册表数据。
- 再注册 —— 载入业务逻辑,可能会对注册表数据进行修改并再次写入。
注册表列表
注册表名 | 存储路径 | 作用 |
---|---|---|
echolive:root |
res/data/root.js |
注册表实例创建时创建的第一个注册表,用于在初始化阶段创建其他注册表,并为注册表值提供默认值。 |
echolive:border_style |
res/data/border_style.js |
CSS 中所有边框样式,为配置文件编辑器提供候选值。 |
echolive:emoji |
res/data/emoji.js |
编辑器中的表情包。 |
echolive:emoji_namespace |
无 | 表情包命名空间的重定向表,在编辑器中加载表情包时自动写入。 |
echolive:language |
lang/*.js |
本地化数据,一般情况下最多只有源语言和配置选择的语言。 |
echolive:language_index |
lang/index.js |
本地化索引表,包含所有可用的本地化数据的基本信息。 |
echolive:live_theme |
res/data/live_theme.js |
前台页面主题信息。 |
echolive:palette |
res/data/palette.js |
编辑器中的调色板。 |
echolive:print_effect |
res/data/print_effect.js |
字符打印动效。 |
echolive:script |
无 | 未使用,计划用于加载脚本。 |
echolive:settings_data |
res/data/settings_about_link.js 、res/data/settings_navigation.js |
配置文件编辑器的菜单、关于页面链接等数据,仅使用特定的注册表键。 |
echolive:sound |
res/data/sound.js |
音效信息。 |
echolive:stylesheet |
无 | 未使用,计划用于加载样式表。 |
echolive:system |
无 | 与注册表相关的系统信息,仅使用特定的注册表键。 |
echolive:text_style |
res/data/text_style.js |
消息格式中的样式字段。 |
echolive:timing_function |
res/data/timing_function.js |
动效时间曲线。 |