1

列の 1 つに単純なカスタム ラベル itemrenderer を持つ adobe flex データグリッドがあります。itemrenderer をクリックすると、cairngorm イベントが発生し、サービス呼び出しが行われ、サービス呼び出しからのデータが TitleWindow に取り込まれます。

doubleClickedEnabled プロパティを false に設定しても、アイテム レンダラーをダブルクリックできる場合があり、その結果、2 つのサービス呼び出しが行われ、2 つの TitleWindows が表示されます。他の場合では、トリプル クリックも望ましくない結果を引き起こすようです。

この種の動作を防ぐ方法はありますか?

4

5 に答える 5

2

これが古いことは承知していますが、ダブルクリック イベントを防止する最も簡単な方法はdoubleClickEnabled = "true"、ボタンを設定し、doubleClick イベントに機能を割り当てないことです。したがって、ボタンは 2 回目のクリックを認識しますが、1 回のクリック イベントは送出しません。それが理にかなっていることを願っています-私はこれをテストし、私のために働きます:)

于 2013-02-20T08:21:46.847 に答える
2

クリック イベントをいつ取得したかを追跡し、一定時間 (250 ミリ秒) 内に 2 つ取得した場合は、2 番目を無視します。

var lastTime:Date = new Date(0);

function OnClickHandler(event:Event):void {
    if ((new Date()).time - lastTime.time < 250) {
        return;
    }
    lastTime = new Date();
    ...
}
于 2010-05-11T15:52:50.267 に答える
0
// 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.
}
于 2010-05-11T15:59:02.003 に答える
0

ダブルクリックが 2 つのサービス コールを送信するのを防ぐためのより簡単な解決策は、ダブル クリックを有効にして、シングル クリック イベントと同じハンドラーをダブル クリック イベントで呼び出すことです。

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

もちろん、これでトリプル クリックが防止されるわけではありませんが、これはそれほど頻繁に発生する問題ではありません。

于 2012-02-06T22:33:47.513 に答える
0

これを行う最善の方法は、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;
}
于 2010-05-11T16:36:52.470 に答える