0

地図アプリを実装しています。Google Maps API for Flash を使用しています。マップがクリックされたときにトリガーされる 1 つのコールバック関数があります。さらに、動的に生成されるポリラインが多数あります。ポリラインには、クリック イベント リスナーも割り​​当てられています。問題は、ポリラインをクリックすると、最初にマップ クリック イベントがトリガーされ、次にポリラインのクリック イベントが発生することです。

私はその問題を解決できません。本当にうるさいです。マップのクリック イベントにコールバックを割り当てるコードは次のとおりです。

map = new Map();
map.key = GOOGLE_MAP_KEY;
map.addEventListener(MapMouseEvent.CLICK, onMapClicked, true);

コールバック関数をポリラインのクリック イベントに割り当てるコードは次のとおりです。

var polyline:Polyline = new Polyline(path);
polyline.addEventListener(MapMouseEvent.CLICK, cutToEnd);

ポリラインをクリックしたときに、「onMapClicked」関数の呼び出しを抑制する必要があります。「cutToEnd」メソッドのみを呼び出す必要があります。

ありがとう

4

1 に答える 1

0
map.addEventListener(MapMouseEvent.CLICK, onMapClicked, true);

ここで bubblingPhase を使用します (3 番目の「true」パラメーター)。つまり、ポリラインをクリックすると、イベントはステージからボタンにキャプチャされるため、最初にマップに「到達」します。パラメータを「false」に設定するか、パラメータを 2 つだけ残します (useCapture はデフォルトで「false」です)。次に、ポリラインクリックハンドラーの最後にevent.stopPropagation()メソッド呼び出しを追加します。イベントがステージにバブリングしなくなり、マップに「到達」しなくなります。

UDATE: MapMouseEvent がバブリングしない場合はevent.targetevent.currentTargetプロパティを比較できます。ポリラインクリックリスナーでは、それらは等しくなります。だからあなたは追加することができます

 if(event.target != event.currentTarget)
    return;

マップのクリックリスナーの先頭に。

于 2011-02-23T19:29:49.103 に答える