本文章系列将会记录在做kityminder二次开发过程中,遇到的问题以及解决方法
最近自己在验证脑图编辑器的时候,发现当一个节点中设置多个标签以后,通过撤销进行操作后,界面就会出现一个空白的标签内容,同时在已存在的标签列表中就会出现一个
undefined
的标签文字。效果图如下:
问题分析
首先要理清楚这个问题的话,我们需要先理清楚,设置完多个标签以后,通过点击撤销按钮以后,代码逻辑里面发生了什么事情。
其实整理的逻辑是这样子的。
-
每次页面发生变化的时候,都会去生成一个差异的patch,放到历史的操作记录中。代码如下:
makeUndoDiff() { var headSnap = editorCommand.exportJson(); var diff = compare(headSnap, this.lastContent); if (diff.length) { this.undoList.push(diff); this.setUndo(); while (this.undoList.length > this.MAX_HISTORY) { this.undoList.shift(); } this.lastContent = headSnap; return true; } return false; }
-
用户一旦点击撤销按钮后,就会从undoList中取出最新的一条diff数据,然后调用kityminder的
applyPatches
的方法去构建这个差异的内容undo() { this.patchLock = true