Получить старый текст из события изменения? - PullRequest
0 голосов
/ 25 мая 2010

Можно ли как-нибудь узнать, что изменилось в текстовом поле? Я хотел бы сравнить старый текст с новым текстом ... проблема в том, что у меня есть несколько текстовых областей в редакторе вкладок, и все текстовые области отслеживаются одним EventListener. Я хочу получить значение, рассчитанное по следующей формуле:

globalChangeCount += thisTextArea.currentCharacterCount - thisTextArea.oldtCharacterCount

где globalChangeCount - это значение, измененное всеми изменениями в любой из текстовых областей.

Я ищу эти значения через переменную события, но не могу найти старый текст textArea.

Ответы [ 3 ]

2 голосов
/ 26 мая 2010

Это может или не может быть то, что вы хотите сделать:

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);
}
0 голосов
/ 26 мая 2010

Возможно, вам следует просто создать подкласс TextArea и создать переменную поля oldText, которую вы обновляете внутри после того, как все внешние слушатели будут уведомлены.

0 голосов
/ 25 мая 2010

Вы можете использовать event.currentTarget, чтобы получить ссылку на TextArea, которое вызвало событие, и использовать событие focusIn, чтобы выполнить функцию для заполнения переменной старым текстовым значением.

...