Flex ApplyFormatOperation 中断 Spark TextArea 中的撤消/重做

Posted

技术标签:

【中文标题】Flex ApplyFormatOperation 中断 Spark TextArea 中的撤消/重做【英文标题】:Flex ApplyFormatOperation Breaks Undo/Redo in Spark TextArea 【发布时间】:2012-08-02 10:47:10 【问题描述】:

这是我在这里的第一个问题。所以..如果我问得不好,我很抱歉。

我编写了一个语法高亮文本编辑器,它扩展了 spark TextArea。 通过将 ApplyFormatOperations 应用于文本的各个不同部分来突出显示。但是,一旦应用任何格式操作,我就会失去所有内置的撤消/重做功能。我关闭着色并撤消重做回来。

这是我正在做的事情的简化版本,它消除了撤消/重做。 想象一下,每次你输入一个字符时都会触发它。

//select everything
var operationState:SelectionState = new SelectionState(textFlow, 0, text.length);
//make an example format.
var exampleFormat:TextLayoutFormat = new TextLayoutFormat();
//everytime we run change the color of all the the text.
m_undoTest = !m_undoTest;
if (m_undoTest) 
    exampleFormat.color = "#0839ff"; //make all text bluish.
 else 
    exampleFormat.color = "#ff0839"; //make all text redish.

//make an operation to apply my formatting.     
var formatOperation:ApplyFormatOperation = new ApplyFormatOperation(operationState,            exampleFormat, null);
//apply the operation to the text area.
formatOperation.doOperation();

现在,当我键入时,我的文本会从红色切换为蓝色,并且我无法再撤消。有趣的是,如果我执行相同的步骤但不更改新格式的任何属性。 IE 不会在我们每次运行时切换颜色。撤消重做仍然有效。

任何帮助将不胜感激,谢谢:)

【问题讨论】:

【参考方案1】:

嗯...我在这方面更进一步,通过“editManager”类传递我的所有操作,我不再丢失撤消重做历史。但是……着色现在算作不可撤销的操作……正如您可能想象的那样,这并不理想。因此,现在与您的实际撤消混合在一起,您可以删除所有语法突出显示。还在想办法解决这个问题。

当前实现的要点是这样的:

var editManager:IEditManager = textFlow.interactionManager as IEditManager;
//make an operation to apply my formatting.     
var formatOperation:ApplyFormatOperation = new ApplyFormatOperation(operationState,            exampleFormat, null);
//apply the operation to the text area.
editManager.doOperation(formatOperation);

【讨论】:

以上是关于Flex ApplyFormatOperation 中断 Spark TextArea 中的撤消/重做的主要内容,如果未能解决你的问题,请参考以下文章

Flex布局:Flex布局

flex 1与flex auto

flex布局

flex 布局

【归纳】flex布局

CSS3-flex弹性布局之flex属性