2012-05-02 8 views
6

Meteorのevent mapsを使用して、いくつかの基本的なclickイベントを接続しました。Meteorでのイベントの伝播を停止します

イベントの処理後に伝播を停止するにはどうすればよいですか?

流星のドキュメント

は今、イベントハンドラはjQueryを使ってアップ配線されている、とあなたが受け取るイベント オブジェクトはjQueryのイベントオブジェクトであることを state

しかし、いずれもreturn falseでもe.stopPropagation()も動作していないようです。

+0

私はこれに多くの問題を抱えていました。これがjQueryイベントに戻った理由です。私はそれがバグかもしれないと思うが、私はデバッグする時間がなかったかどうかはわからない。私は同じことをやってみることを勧めたり、デバッグしようとします。 – jonathanKingston

+0

私の代替手段は、jQueryイベントハンドラを使い、ハンドラ内から流星イベントマップに '$( '#foo')。trigger( 'bar')'をフックすることです。 – Emmett

答えて

7

現在、stopPropagationは限られた状況で機能します。 2つのハンドラ間で伝播を停止するには、ハンドラを別のテンプレートで指定する必要があります。また、内部テンプレートと外部テンプレートの間に介在するDOMノードコンテナが必要です。修正プログラムは現在開発中であり、今後のリリースに移行する予定です。

あなたのコードの要点を投稿すれば、あなたの特定のケースにアドレッシングを付けることができますか?

回避策として、jQueryによって提供されるe.stopImmediatePropagation()を試してみてください。他のハンドラは実行しないでください。

+0

情報ありがとうございます。私のコードでは、私は 'show'を持っています。私は、 '#show'でクリックイベントを処理して、href urlが追跡されないようにしたいと考えています。 (現在は、クリックが処理された後にURLバーに '# 'が表示されます) – Emmett

+0

@dgreensp - これはバグとしてドキュメントに記載されていましたが、削除されたときに修正されている可能性があります。私は、この問題が修正されるまでそれが追加されることを提案します。 バグについて公開しています私は個人的にはより信頼できる環境を提供すると思います。 – jonathanKingston

+1

Aha、 'e.preventDefault()'が必要です! @jonathanKingston、これらのバグは0.3.5で修正されました。 – dgreensp

1

これを自分自身で調べているうちに、この質問に遭遇しました。 Blazeイベントマップのドキュメントはhereです。他の要素まで(バブリング)を伝播するイベントを防ぐ

stopPropagation()

:この問題については

は流星にあなたが欲しいものに応じて、2つの機能を考慮する必要があります。この要素マップと他のイベントマップでは、同じ要素に一致する他のイベントハンドラがまだ起動されています。

stopImmediatePropagation()

防止にこのイベントマップ内の他のハンドラを含む、このイベント上で実行されてからのすべての追加のイベントハンドラ、ハンドラは、バブリングによって達し、他のイベントマップ内のハンドラ。

私が望んだのは、バブリングを止めて他のMeteorイベントハンドラに伝播を止めることでした。だからevent.stopImmediatePropagation()はそのトリックを行いましたが、実際には上でアドバイスされたような回避策ではありません。

関連する問題