这不是一个很新的问题,网上已经有很多优秀的程序员给出了比较详实的解决方案,这里从as3的角度再加以阐述并给出代码。
将所有的操作认为是一个Command,每一个Command都有Undo和Endo两个动作。Undo为撤消,Endo为回复/正常的操作(正常操作和撤消后回复基本是一样的)。所以这里写一个接口ICommand,所有的Command都要实现这个接口:
package com.leslie.WebComponent.Util{
public interface ICommand {
// Interface methods:
function Undo() : void;
function Redo() : void;
}
}
以文本编辑器为例,制作一个URLCommand,这个动作在文本中插入一个URL,实现Undo()和Redo()
package com.leslie.WebComponent.Util{ import flash.text.TextFormat; import fl.controls.TextInput; import flash.text.TextField; public class URLCommand implements ICommand{ var mainTxt : TextField; //文本框 var lastTextFormat : TextFormat; //之前的文本的文本格式 var URL : String; //网址 var newString : String; //超连接字面文字 var lastString : String; //原先的文字(超连接字面文字会替代掉原 来的文字,需要保存便于撤消) var star