块的构成
在开始前,需要特别的对编辑器的“块(block)
”组成成分进行介绍,以免在开发时造成困惑:
左侧的编辑区域
鼠标点击左侧编辑的块内容(editor)
后,会在区块上方显示“工具栏(toolbar)
”,toolbar从左到右功能依次是:
- 添加块:插入功能
- 当前区块图标指示器:如果当前区块允许变换
(transform)
,点击后显示transform菜单
- 拖拽:按住可将当前区块拖拽到文档中的其它区块之间进行释放
- 上/下移动:点击将当前区块上移或下移
- 块的内联控制器:
Block inline tunes
,如果区块支持,则可以在toolbar中插入一个或多个按钮,以在编辑过程中控制一些Block数据(图片上的例子是文本对齐按钮)
- 富文本内联控制器:
RichText inline tunes
,仅仅在选中区域是“富文本编辑”时显示诸如加粗、斜体等操作。选中的不是富文本则不显示。
右侧的边栏部分
右侧是块设置区域(Block settings)
,显示当前选中的区块调节参数。
在开发“块”的过程中,上述的 块内容编辑区域 editor
、 Block inline tunes
、 Block settings
都是属于开发的范畴。
其中,Block inline tunes
、 Block settings
是可选的(如果有设置需要)
数据结构
nvPress的编辑器数据结构类似于:
{
_nv_block_editor: true,
blocks: [ // 编辑块主列表(row)
{
type: "paragraph",
id: "ABCDEFGHIJ",
data: {
text: "段落区块内容",
}
},
{
type: "paragraph",
id: "BCDEFGHIJK",
data: {
text: "另一个段落区块内容",
}
},
{
type: "pandastudio/panel",
id: "QAZWSXEDCR",
data: {
title: "面板模块标题",
content: {
_nv_block_editor: true,
blocks: [] //编辑块子列表(row)
}
}
},
]
}
每个区块中又可以嵌入其他innerBlocks(例如上面的面板模块)。
数据响应
在上面的“块的构成”部分可以看到,块的开发包含了:editor
、Block inline tunes
、Block settings
三个部分,这三个部分通常是3个不同的组件,它们都只能从 props 中得到仅block自身的type
、id
、data
信息。其中,data信息是reactive的,也就意味着,在这3个部分之间,只要1个修改了data中的数据,其它部分都可以响应!
数据存储
注册块时定义了可以存储的data字段有哪些(options.attributes),凡是在块的部分中修改了 data 数据,被定义过的字段都会自动更新到真实数据中,而真实数据的变动,也会让“块”数据得到更新。
(注册块时没有定义的data字段不会更新到真实数据,但它仍然是可响应的,这意味着你可以创造一些在Block生命周期内响应的数据,而不必存储到真实数据中去)
API在哪里
nvPress所有的API都直接暴露到了 window.nv
对象中。