Apache flex 从更改事件中获取旧文本?

Apache flex 从更改事件中获取旧文本?,apache-flex,actionscript-3,actionscript,flex3,Apache Flex,Actionscript 3,Actionscript,Flex3,我能找出文本字段的变化吗?我想比较一下旧文本和新文本。。。问题是,我在选项卡编辑器中有多个文本区域,所有文本区域都由一个eventListener监视。我想得到一个由下一个公式计算的值: globalChangeCount+=thisTextArea.currentCharacterCount-thisTextArea.oldtCharacterCount 其中,globalChangeCount是由任何文本区域中的所有更改修改的值 我正在通过事件变量搜索这些值,但无法通过seam查找textA

我能找出文本字段的变化吗?我想比较一下旧文本和新文本。。。问题是,我在选项卡编辑器中有多个文本区域,所有文本区域都由一个eventListener监视。我想得到一个由下一个公式计算的值:

globalChangeCount+=thisTextArea.currentCharacterCount-thisTextArea.oldtCharacterCount

其中,globalChangeCount是由任何文本区域中的所有更改修改的值


我正在通过事件变量搜索这些值,但无法通过seam查找textArea的旧文本。

您可以使用event.currentTarget获取对触发事件的textArea的引用,然后使用focusIn事件执行一个函数,用旧文本值填充变量。

也许您应该将
TextArea
子类化,并创建一个
oldText
字段变量,在通知所有外部侦听器后,您可以在内部更新该变量。

这可能是您想要做的,也可能不是:

package
{
    import mx.controls.TextArea;


    public class CountingTextArea extends TextArea
    {

        public var staleText : String = "";

        [Bindable("textChanged")]
        [NonCommittingChangeEvent("change")]
        public function get charDiff() : int
        {
            var diff : int = staleText.length - text.length;
            staleText = text;
            return diff;
        }

        public function CountingTextArea()
        {
            super();
        }
    }
}
我制作它是为了让您可以将其用作绑定源。您可以使用以下命令,而不是订阅每个文本区域上的事件:

function addWatchers():void
{
    ChangeWatcher.watch(countingTextArea1, ["charDiff"], charDiffChangeHandler );
    ...
    ChangeWatcher.watch(countingTextArea5, ["charDiff"], charDiffChangeHandler );
}
还有事件处理程序:

function charDiffChangeHandler( event : PropertyChangeEvent ) : void
{
    trace(event.currentTarget.charDiff);
    // or
    trace(event.newValue);
}

如何更新这个oldText变量,因为如果我用event.CHANGE捕捉到里面的事件,我将无法获得旧版本。我不想看KeyboardEvent.KEY_DOWN或类似内容,因为文本也可以在不按键盘的情况下插入(复制/粘贴)。我怎样才能在事件发生前立即处理事件(或某事)?(每次按下键并复制/粘贴后)我知道我可以通过event.currentTarget获得textArea的变量,但我没有得到它,焦点是什么。。。旧文本不是文本区域获得焦点之前的文本,而是更改之前的文本。如果focusIn对您来说还不够晚,我认为您必须同时监听按键(对于实际输入文本的按键,以及ctrl+c及其等效项)和单击(在通过上下文菜单复制的情况下)事件,让这些事件监听器指向同一个函数来实现您的逻辑。我没有使用标志或函数上方的那些内容,但这对我来说是一个解决方案。。。。我如何调用这个函数,或者它是否自动为我调用,唯一的问题是当我从类ex.event.currentTarget.staleText之外捕获更改事件时获取该staleText?请参阅上面的更新。我还不确定通知在这里是如何工作的。