jQueryイベントには、追加したイベントだけを簡単かつ安全にバインド解除するための名前空間の概念が組み込まれています。
ただし、これらの名前空間は、異なるプラグインが同じ基本イベントをトリガーする場合の衝突を防ぎません。たとえば、プラグインAがhide.foo
イベントをトリガーし、プラグインBがイベントをトリガーする場合、名前空間を使用していてもhide.bar
、イベントをリッスンしているハンドラーは2回呼び出されます。hide
これは、プラグインが、、、、、、などの過度に一般的な名前をトリガーするときに問題を引き起こす可能性がありますがopen
、そこにある非常に多くのプラグイン(jQueryUIやブートストラップなどの大規模なライブラリからのものでさえ)は、第2レベルの名前空間なしでこれらの一般的なイベントをトリガーします。close
show
hide
start
end
これが私の質問です。イベントを他のプラグインや標準のDOMイベントと区別するために、名前空間の2番目のレベルが賢明であるように思われます。規則は、標準のjQueryドット表記を使用する場合のようnamespace:eventName
なものにすることができます。namespace:eventName.secondaryNamespace
しかし、誰もこれをやっていないようですので、そうしないやむを得ない理由があるのではないかと思います。誰か知っていますか?
アップデート:
より具体的な例を提供するために、ユーザーが特定のテキストにカーソルを合わせると、ツールチップのイベントshow
と イベントをトリガーするプラグインAを使用しているとします。イベントは伝播し、DOMは絶えず変化するため、すべてのツールチップからイベントをキャッチするためhide
に、イベントリスナーを要素にバインドすることにしました。document
show
hide
次に、数週間後、プラグインBをアプリに追加します。これによりhide
、ユーザーがアラートメッセージを閉じた後にもイベントがトリガーされます。ツールチッププラグインとアラートメッセージプラグインの両方が同じ名前のイベントをトリガーしているため、突然、ツールチップコードが必要以上に呼び出されるようになります。