как остановить запуск двух событий одновременно в текстовой области spark (as3 flex4)

#actionscript-3 #events #apache-flex #flex4 #flex-spark

#actionscript-3 #Мероприятия #apache-flex #flex4 #flex-spark

Вопрос:

Прослушиватель событий TextChanged и valueCommit присоединяются к текстовой области spark следующим образом:

 addEventListener("textChanged", 
    function(event:Event):void {                                    
        colorize();                 
},false,0,true);

addEventListener("valueCommit",
    function(event:Event):void {                    
        colorize();                 
},false,0,true);
  

если я набираю что-либо в текстовой области, то эта функция colorize() вызывается дважды. Как я могу остановить это, чтобы оба события не запускались вместе. Пожалуйста, помогите

Ответ №1:

Если вы хотите прослушать ввод текста, зачем вам два слушателя? Если вам действительно нужны два прослушивателя, вам нужно поставить в очередь colorize с помощью a setTimeout вместо прямого вызова:

 import flash.utils.setTimeout;

private var colorizeQueued:Boolean = false;
private function queueColorize():void
{
    if (colorizeQueued)
        return;

    colorizeQueued = true;
    setTimeout(function():void
    {
        // Process for real and note update
        colorize();
        colorizeQueued = false;
    }, 100);
}


addEventListener("textChanged", 
    function(event:Event):void {                                    
        queueColorize();                 
},false,0,true);

addEventListener("valueCommit",
    function(event:Event):void {                    
        queueColorize();           
},false,0,true);
  

Комментарии:

1. @N Rohler: Просто из любопытства, почему это не сработает с этим решением и без тайм-аута?

2. @AntonPetrov: В принципе, queueColorize метод делает это: если он вызывается в первый раз за некоторое время, он вызывает colorize . В противном случае он говорит: «Меня недавно вызывали, поэтому я ничего не собираюсь делать».

3. Вы не поняли мой вопрос, но я понял, что хотел. Спасибо.