问题标签 [undo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
37 回答
4219590 浏览

git - 如何在提交之前撤消“git add”?

我错误地使用以下命令将文件添加到 Git:

我还没跑git commit。有没有办法撤消这个,所以这些文件不会包含在提交中?

0 投票
1 回答
849 浏览

java - 如何撤消对 JSpinner 的更改?

我需要验证 a 的用户输入JSpinner,如果无效,我需要撤消(回滚)值更改。最好的方法是什么?

0 投票
4 回答
2222 浏览

java - 对 Swing 的撤消管理器隐藏某些操作

我正在尝试编写一个支持某种着色的 JTextPane:当用户键入文本时,我正在运行一些代码,根据某种算法为文本着色。这很好用。

问题是着色操作是在撤消管理器中注册的(带有 EventType.CHANGE 的 DefaultDocumentEvent)。因此,当用户单击撤消时,着色消失。只有在第二个撤消请求时,文本本身才会回滚。

(请注意,着色算法有点慢,因此我无法在插入文本时为其着色)。

如果我试图阻止 CHANGE 事件到达撤消管理器,我会在多次撤消请求后得到一个异常:这是因为文档内容不符合 undoable-edit 对象所期望的内容。

有任何想法吗?

0 投票
2 回答
666 浏览

version-control - 如何撤消不属于变更集的 bitkeeper 中的签入?

我在 bitkeeper 存储库中的项目中有一个文件。我签入了一个文件,但我没有提交更改以创建变更集。如何撤消签入?

如果我有一个变更集,我可以撤消提交:

但在这种情况下,我无法提交和撤消变更集,因为我有其他不想接触的签入文件。

0 投票
1 回答
719 浏览

language-agnostic - 撤消/重做级联删除

我正在尝试使用命令模式在我的应用程序中实现撤消/重做功能。我面临一个问题。

为了说明这一点,让我们假设您可以使用我的应用程序创建 2D 配置文件(任意数量)。

从这些 2D 配置文件中,您可以创建具有不同属性(名称、颜色、比例等)的 3D 零件。

当一个配置文件被删除时,在这个配置文件上构建的所有 3D 零件也将被自动删除(当一个配置文件即将被删除时,3D 零件经理会收到通知,并将删除过时的 3D 零件。还会通知视图更新图形用户界面)。

这是我面临问题的地方:我正在编写用于删除 2D 配置文件的撤消/重做命令,它看起来像这样(伪代码):

正如您在上面的代码中看到的,删除 2D 轮廓将自动删除依赖于已删除轮廓的所有 3D 零件。

但是在撤消时,将 2D 配置文件重新添加到列表中是不够的:3D 部分丢失了。

我该怎么办 ?撤消/重做命令是否应该负责删除 3D 零件(这实际上是由 3D 零件管理器完成的)?这意味着撤消/重做命令也将负责通知视图更新 GUI。

还是应该撤消/重做命令创建所有将被删除的 3d 零件的内部副本,并让 3d 零件管理器删除 3D 零件?

还是有其他更好的解决方案?

谢谢你的帮助 !

0 投票
5 回答
3094 浏览

undo - 在事务数据库中撤消

我不知道如何使用事务数据库实现用户友好界面的撤消属性。

一方面,建议用户具有多级(无限)撤消的可能性,如答案中所述。可能有助于解决此问题的模式是MementoCommand

然而,使用包含触发器、不断增长的序列号和不可逆过程的复杂数据库,很难想象撤消操作如何在事务边界之外的不同点工作。换句话说,撤消到最后一次提交的事务只是一个回滚,但是怎么可能回到不同的时刻呢?

更新(基于到目前为止的答案):我不一定希望在修改已经提交时撤消工作,我会专注于具有开放事务的正在运行的应用程序。每当用户单击保存时,这意味着提交,但在保存之前 - 在同一事务期间 - 撤消应该起作用。我知道使用数据库作为持久层只是一个实现细节,用户不应该为此烦恼。但是,如果我们认为“数据库中的撤消和 GUI 中的撤消概念是根本不同的东西”并且我们不对数据库使用撤消,那么无限撤消只是一个流行词。我知道“回滚是......不是用户撤消”。

那么如何在同一个事务中实现“任何更改导致的级联效果”的客户端级撤消呢?

0 投票
3 回答
2311 浏览

datagridview - 如何让我的控件在 DataGridView 关闭我的控件之前检测到 Escape 键?

我有一个具有撤消功能的控件,当用户按下 Escape 时,控件将恢复原始值。

问题是当我将控件集成到 DataGridView 时。DataGridView “吃掉” Escape 键,因此我的控件无法检测到 Escape 键。

当我在 EditingControlWantsInputKey 上设置“return true”时,我的控件能够检测到 Escape 键,但出现了其他问题,DataGridView 无法关闭我的控件,它停留在 EditMode。

如何让我的控件检测 Escape 键同时还允许 DataGridView 关闭我的控件?

0 投票
2 回答
259 浏览

vim - 当文件变为只读时,Vim 会忘记它的历史

在我使用 vi 将文件提交到 Perforce 后,它将变为只读的。

如果我在 vim 中打开这个文件,那么当它变为 readonline 时,我会丢失我的撤消重做历史,甚至不会被询问。

当您在编辑时文件变为只读时,VI 中是否有保留撤消重做历史记录的选项?

0 投票
6 回答
4899 浏览

javascript - 如何撤消最后选中的复选框?

您好我创建了一个 javascript 函数来检查所选模块的数量是否大于给定值。因此,每次调用复选框时都会调用该函数,并且该函数会遍历所有复选框并计算总数以查看它是否更大。但问题是当用户选中复选框时,如果总积分大于值,我想将复选框设置为选中 = false。但我不知道要撤消哪个复选框。javascript中是否有任何撤消最后点击功能?

0 投票
14 回答
767807 浏览

git - 在 Git 中撤消对一个文件的工作副本修改?

在最后一次提交之后,我修改了工作副本中的一堆文件,但我想撤消对其中一个文件的更改,因为将其重置为与最近提交相同的状态。

但是,我只想单独撤消该文件的工作副本更改,没有其他内容。

我怎么做?