Core Plugin

Slate 编辑器本身的约束非常少。它默认下仅有的逻辑是与 contenteditable 本身功能相关的逻辑——处理文本、选择范围等。这些逻辑包含在一个单独的插件中,其名为 "core" 插件。

Default Behavior

核心插件的默认行为,将执行下列逻辑:

onBeforeInput

当输入文本时,核心插件将 event.data 中的文本插入编辑器中。

onBlur

当编辑器失去焦点时,核心插件更新 Slate 内部的数据模型,并不执行重绘。

onFocus

当编辑器获得焦点时,核心插件更新 Slate 内部的数据模型,并不执行重绘。

onCopy

当用户复制部分文档时,核心插件为所复制文本附带上完整的文档序列化内容后,将其添加到剪贴板,从而能够在粘贴时反序列化并插入文档以保留格式。

onCut

当用户剪切部分文档时,核心插件执行与 onCopy 相同的逻辑,但其也会删除当前选中范围下的内容。

onDrop

当用户向编辑器中放下内容时,核心插件将 texthtml 类型处理为纯文本,对 files 类型不作处理。

onKeyDown

在按键时,核心插件处理部分 contenteditable 元素所需执行的【原生】行为。例如在按下 enter 时拆分 block、在按下 backspace 时移除字符、在按下 cmd-z 时触发对历史记录的撤销等。

onPaste

当用户向编辑器中粘贴内容时,核心插件将 texthtml 类型的粘贴处理为纯文本,对 files 类型不作处理。

onSelect

当用户在 DOM 中选择了新内容时,核心插件更新 Slate 内部数据模型中的选择范围,并按需执行重绘。

render

渲染编辑器中全部默认内容!

schema

核心插件定义的 schema 保证了对内容的若干约束,并定义了默认的 block 和 inline 节点渲染器组件——各自包裹在 <div><span> 中。每个组件都包含了避免不必要重绘的 shouldComponentUpdate 逻辑。

默认的 block 组件也包含了对其 placeholder 的控制逻辑,这是通过 <Editor> 的 placeholder 选项控制的。

Overriding Defaults

所有你添加的插件都会覆盖核心插件的默认行为,这是因为核心插件总是在最后解析。

不过,有时候你可能希望在不添加新逻辑的前提下,禁用核心插件的逻辑。例如,你可能想要阻止 enter 键执行任何操作。这时,你需要定义一个 "noop" 回调。

一个无操作 onBeforeInput 回调形如:

function onBeforeInput(event, data, state) {
  event.preventDefault()
  return state
}

注意在上例中调用了 event.preventDefault() 来阻止默认浏览器行为,并返回了当前 state 来阻止编辑器继续解析其插件栈。

results matching ""

    No results matching ""