使用命令模式,即
命令对象对于实现多级撤消很有用——如果程序中的所有用户操作都实现为命令对象,则程序可以保留最近执行的命令的堆栈。当用户想要撤消命令时,程序只需弹出最近的命令对象并执行其 undo() 方法。
基本的 JavaScript 实现如下所示:
function command(instance) {
this.command = instance;
this.done = [];
this.execute = function execute() {
this.command.execute();
this.done.push(this.command);
};
this.undo = function undo() {
var command = this.done.pop();
command.undo();
};
}
要对此进行测试,请构建简单的 DOM:
<ul>
<li>first</li>
</ul>
并定义一个您想要使用的命令对象。这样的对象应该包含其执行逻辑以及用于重建 DOM 先前状态的其他行为(至少在我们的示例中):
var appendcommand = new command({
execute: function(){
$('ul').append('<li>new</li>');
},
undo: function(){
$('ul li:last').remove();
}
});
执行后:
appendcommand.execute();
您的页面将从
至
同时执行:
appendcommand.undo();
将此页面转换为其原始状态: