Adobe Flex предотвращает двойной щелчок - PullRequest
1 голос
/ 11 мая 2010

У меня есть Adobe Flex Data Drid с простым настраиваемым средством вывода меток в одном из столбцов. Нажатие на элементарщик событий запускает событие cairngorm, которое приводит к выполнению вызова службы, и данные из вызова службы заполняют TitleWindow.

Несмотря на то, что я установил для свойства doubleClickedEnabled значение false, иногда можно дважды щелкнуть средство визуализации элементов, в результате чего выполняются два вызова службы и отображаются два окна TitleW. В других случаях тройной щелчок также вызывает нежелательный результат.

Есть ли способ предотвратить такое поведение?

Ответы [ 5 ]

2 голосов
/ 20 февраля 2013

Хорошо, я знаю, что это старый, но самый простой способ предотвратить событие двойного щелчка - установить для кнопки doubleClickEnabled = "true" и не назначать никакой функции событию doubleClick. Таким образом, кнопка распознает второй щелчок, но не отправляет событие одного щелчка. Надеюсь, что это имеет смысл - я проверил это и работает для меня:)

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

Отслеживайте, когда вы получаете событие щелчка, и если вы получаете два в течение определенного промежутка времени (250 мс), игнорируйте второе.

var lastTime:Date = new Date(0);

function OnClickHandler(event:Event):void {
    if ((new Date()).time - lastTime.time < 250) {
        return;
    }
    lastTime = new Date();
    ...
}
0 голосов
/ 07 февраля 2012

Более простое решение, которое позволит предотвратить двойной щелчок при отправке двух вызовов службы, - включить двойной щелчок и назначить событию двойного щелчка тот же обработчик, что и событие одного щелчка.

<s:Button label="Button"
          click="clickHandler()"
          doubleClick="clickHandler()"
          doubleClickEnabled="true" />

Конечно, это не предотвращает тройные щелчки, но это гораздо менее частая проблема.

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

Лучший способ сделать это - установить флаг в вашем itemRenderer, чтобы он отмечал, что он был нажат один раз. Это предотвращает отправку еще одного события cairngorm до тех пор, пока не будет возвращен результат первого события, и в этот момент вы сбросите флаг, что позволит снова щелкнуть по нему.

Для краткости в следующем коде предполагается, что все происходит в одной и той же области видимости. Если это не так, вам придется отправлять и получать события в ItemRender и из другого контекста.

[Bindable]
var _clickEnabled:Boolean = true;

private function doClickStuff() : void {
  if (_clickEnabled) {
    // fire your event
    _clickEnabled = false;
  } 
}

private function onEventReturnHandler(event:Event) : void {
  // do whatever it is you're going to do
  _clickEnabled = true;
}
0 голосов
/ 11 мая 2010
// class variable section
var lastTime:Date = null;

...

function handler(evt:Event):void{
    var currentTime = new Date();
    if (lastTime === null){
         lastTime = currentTime;
    } else {
         var diff = currentTime.milliseconds() - lastTime.milliseconds();
         if (diff <= 250) // try some other intervals to get best result for you.
             return;
         else 
             lastTime = currentTime;
    }
    ... the rest of your code.
}
...