从变更事件中获取旧文本?

时间:2010-05-25 18:08:13

标签: flex actionscript-3 actionscript flex3

我可以以某种方式找出文本字段中的变化吗?我想比较旧文本和新文本...问题是,我在选项卡编辑器中有多个textAreas,所有textAreas都由一个eventListener监视。我想通过下一个公式得到一个值:

globalChangeCount += thisTextArea.currentCharacterCount - thisTextArea.oldtCharacterCount

其中globalChangeCount是由任何textAreas中的所有更改修改的值。

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

3 个答案:

答案 0 :(得分:2)

这可能是也可能不是你想要做的事情:

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();
        }
    }
}

我做到了这样你就可以把它作为绑定的来源。您可以使用:

,而不是在每个TextArea上订阅该事件
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);
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

也许你应该只是继承TextArea并创建一个oldText字段变量,在通知所有外部监听器之后在内部更新。