富文本编辑器 draft.js(一)

键值绑定(翻译)

Editor组件通过keyBindingFn为你的编辑器提供了灵活地自定义键值绑定。

默认:
getDefaultKeyBinding默认键值绑定函数。

因为draft框架严格控制DOM渲染和行为,基本编辑命令必须通过键值绑定系统捕获和转换。

getDefaultKeyBinding与已知命令DraftEditorCommand字符串os级别的编辑器相匹配,这个字符串对应了组件处理的行为。

例如,Ctrl + Z(Win)和Cmd + Z(OSX)映射到“撤消”命令,然后交给处理程序执行EditorState.undo()。

定制:

你可以提供你自己的键值绑定函数来提供定制命令字符串。

建议你的函数使用getDefaultKeyBinding作为获取定制失败的选择,这样你可能受益于默认的命令。

使用您的自定义命令字符串,您可以实现handleKeyCommand属性功能,它允许您使用字符串映射到你想要的行为。如果handleKeyCommand返回“处理”,被认为是处理的命令。如果它返回“未处理”,被认为是未处理的命令。

例子

假设我们可以先预存一个myeditor-save的键值绑定命令

首先,让我们定义键值绑定功能:

import {getDefaultKeyBinding, KeyBindingUtil} from 'draft-js';
const {hasCommandModifier} = KeyBindingUtil;

function myKeyBindingFn(e: SyntheticKeyboardEvent): string {
  if (e.keyCode === 83 /* `S` key */ && hasCommandModifier(e)) {
    return 'myeditor-save';
  }
  return getDefaultKeyBinding(e);
}

函数接收一个关键事件,我们检查它是否符合我们的标准:它必须是一个S键,(keycode83对应键盘上的 S)并且它必须有一个命令修饰符,即在OSX里面是 cmd,其他的则为 ctrl 控制键。

即 OSX 为 cmd+S ,WIN 为 ctrl+S,

如果命令是一个匹配,返回一个字符串的命令名称。否则,使用默认的键值绑定。

在我们的编辑器组件,我们可以利用命令通过handleKeyCommand属性:

import {Editor} from "draft-js";
class MyEditor extends React.Component {
  // ...

  handleKeyCommand(command: string): DraftHandleValue {
    if (command === "myeditor-save") {
      // Perform a request to save your contents, set
      // a new `editorState`, etc.
      return "handled";
    }
    return "not-handled";
  }

  render() {
    return (
      <Editor
        editorState={this.state.editorState}
        handleKeyCommand={this.handleKeyCommand.bind(this)}
        keyBindingFn={myKeyBindingFn}
        ...
      />
    );
  }
}

“myeditor-save”命令可用于我们的习惯行为,并返回“handled” 告诉编辑器命令已经被处理了.

通过返回"not-handled"的情况下,默认的命令能够使用默认处理行为。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,212评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,174评论 6 342
  • 好种子:早上妹妹再一次的睡了个整夜觉,直到6点20才找奶吃,吃好奶继续睡,而我刚好到起床的时间,一切都是刚刚好!非...
    成长中的小蜗牛阅读 1,508评论 2 1
  • 李家老太,我的母亲,退休的人们教师。今天是她老人家79周岁生辰,今天我许了一个愿望,希望明年的今天依然这样,全家四...
    李小五阅读 3,715评论 10 2
  • 美不是你的全部, 你还那么腼腆。 怯生生一窥, 紫了衣衫, 醉了春夏。
    宗林的李阅读 2,962评论 3 2

友情链接更多精彩内容