目 录CONTENT

文章目录

1.3.6.[Obsidian][插件][编辑器]状态管理

克林空间
2024-01-30 / 0 评论 / 0 点赞 / 15 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-01-30,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本节旨在介绍[[编辑器扩展]]的状态管理。

[!NOTE]

本页旨在为Obsidian插件开发人员提炼 CodeMirror 6 的官方文档。有关状态管理的更多详细信息,请参阅 State and Updates

状态更改

在大多数应用程序中,通常通过为属性或变量分配新值来更新状态。然后旧值将被替代。

let note = "";
note = "Heading"
note = "# Heading"
note = "## Heading" // How to undo this?

为了支持撤消和重做对用户工作区的更改等功能,Obsidian会保留已进行的所有更改的历史记录。若要撤消更改,可以返回到进行更改之前的某个时间点。

状态字段
0
1Heading 标题
2# Heading # 标题
3## Heading ## 标题

在 TypeScript 中,你会得到这样的结果:

const changes: ChangeSpec[] = [];

changes.push({ from: 0, insert: "Heading" });
changes.push({ from: 0, insert: "# " });
changes.push({ from: 0, insert: "#" });

事务

想象一下,您选择一些文本并按下双引号, " 以用引号将选择的两边都括起来。实现该功能的一种方法是:

  1. 在所选内容的开头插入 " 。
  2. 在所选内容的结尾插入 "

请注意,该实现由两个状态更改组成。如果将这些内容添加到撤消历史记录中,则用户需要撤消两次,每个双引号撤消一次。为了避免这种情况,如果您可以将这些更改分组,使它们显示为一个,会怎么样?

对于编辑器扩展,一起发生的一组状态更改称为事务。

如果将到目前为止所学的知识结合起来,并且允许仅包含单个状态更改的事务,则可以将状态视为事务历史记录。

将所有这些结合在一起,在编辑器扩展中实现之前的环绕特性,以下是向编辑器视图添加或分派事务的方法:

view.dispatch({
  changes: [
    { from: selectionStart, insert: `"` },
    { from: selectionEnd, insert: `"` }
  ]
});

下一步

在本节,您了解了如何将状态建模为一系列状态更改,以及如何将它们分组到事务中。

要了解如何在编辑器中管理自定义状态,请参阅[[状态字段]]。

0

评论区