Odoo 编辑器¶
Odoo 编辑器是 Odoo 自己的富文本编辑器。其源代码可以在 odoo-editor 目录 中找到。
功能框¶
功能框是一个用户界面组件,包含按 类别 组织的 命令。当在编辑器中输入 /
时,功能框会显示出来。用户输入文本时可以过滤命令,并使用方向键导航。

修改功能框¶
任何时候只能实例化一个功能框,这项工作由编辑器本身完成。其功能框实例可以在 powerbox
实例变量中找到。要更改功能框的内容和选项,请在编辑器实例化之前更改传递给它的选项。
重要
切勿自行实例化功能框。始终使用当前编辑器自己的实例。
Example
假设我们要为 mass_mailing
模块向 Powerbox 添加一个新命令 Document
。我们希望将其添加到一个名为 Documentation
的新类别中,并且希望它位于 Powerbox 的顶部。
mass_mailing
扩展了 https://github.com/odoo/odoo/blob/18.0/addons/mass_mailing/static/src/js/wysiwyg.js web_editor
的 Wysiwyg 类,该类在 start
方法中实例化编辑器。在此之前,它会调用自己的 _getPowerboxOptions
方法,该方法可以方便地被重写以添加我们的新命令。
由于 mass_mailing
已经重写了 _getPowerboxOptions
,我们只需将新命令添加到其中即可:
_getPowerboxOptions: function () {
const options = this._super();
// (existing code before the return statement)
options.categories.push({
name: _t('Documentation'),
priority: 300,
});
options.commands.push({
name: _t('Document'),
category: _t('Documentation'),
description: _t("Add this text to your mailing's documentation"),
fontawesome: 'fa-book',
priority: 1, // This is the only command in its category anyway.
});
return options;
}
重要
为了使您的命令和类别的名称和描述能够被翻译,请确保将它们包装在 _t
函数中。
小技巧
为了避免失控的优先级冲突,请勿使用随机数字作为优先级:查看已有的其他优先级并相应选择您的值(就像处理 z-index
一样)。
打开自定义功能框¶
可以使用一组自定义的类别和命令打开功能框,绕过所有预定义的内容。为此,调用功能框的 open
方法,并传入您的自定义命令和类别。

Example
我们需要当前 Powerbox 的实例,它可以在当前编辑器中找到。在 Wysiwyg 类 中,您可以通过 this.odooEditor.powerbox
找到它。
现在,通过我们的自定义“文档”命令打开它,并将其归入自定义“文档”类别:
this.odooEditor.powerbox.open(
[{
name: _t('Document'),
category: _t('Documentation'),
description: _t("Add this text to your mailing's documentation"),
fontawesome: 'fa-book',
priority: 1, // This is the only command in its category anyway.
}],
[{
name: _t('Documentation'),
priority: 300,
}]
);
过滤命令¶
有三种方式可以过滤命令:

参考¶
类别¶
名称 |
类型 |
描述 |
---|---|---|
|
|
类别的名称 |
|
|
用于对类别排序:优先级较高的类别会显示在功能框的更高位置(优先级相同的类别按字母顺序排列)。 |
注解
如果存在多个同名类别,它们将被合并为一个类别。其优先级将是最后声明的类别版本中定义的优先级。
命令¶
名称 |
类型 |
描述 |
---|---|---|
|
|
命令的名称 |
|
|
命令所属类别的名称 |
|
|
用于描述命令的简短文本 |
|
|
将用作命令图标的 Font Awesome 名称 |
|
|
用于对命令排序:优先级较高的命令会显示在功能框的更高位置(优先级相同的命令按字母顺序排列) |
|
|
当选择命令时执行的函数(可以是异步的) |
|
|
在某些条件下用于禁用命令的函数(当返回 |
注解
如果命令指向一个尚不存在的类别,则该类别将被创建并附加到功能框的末尾。
选项¶
以下选项可以传递给 OdooEditor,然后传递给功能框的实例:
名称 |
类型 |
描述 |
---|---|---|
|
|
要添加到编辑器定义的默认命令中的命令 |
|
|
要添加到编辑器定义的默认类别中的类别 |
|
|
用于过滤功能框中显示的命令的函数 |
|
|
返回编辑器祖先元素的 |