ウィジェット ファクトリで jQuery を使用し、カスタム イベントを使用してアプリケーションのイベントを処理しています。
これは、すべてのイベント バインディングが次のようになることを意味します。
//...in the widget factory code
$(this.element).addClass('customEventClass');
$(this.element).bind('mysite.loadNextPage', $.proxy(this, 'loadNextPage');
イベントは次のようにしてトリガーされます。
$('.customEventClass').trigger('mysite.loadNextPage');
イベントは、それらを受け取る必要がある要素に直接バインドされるため、これらのカスタム イベントを DOM でバブルアップさせる必要はありません。イベントハンドラーコードでこれを行うことで、イベントがバブルアップしたかどうかを確認できることがわかっています。
if (event.target != event.currentTarget) {
event.stopPropagation();
event.preventDefault();
return;
}
しかし、現時点では、カスタム イベントをリッスンしている要素のほとんどに「mysite.loadNextPage」のハンドラーが登録されていないため、51 のイベントが生成され、そのうち 1 つだけが実際に何かを行います。次のいずれかの方法はありますか:
- これらのイベントをまったくバブルしないように jQuery に指示するか、
- クラス「customEventClass」を持つすべての DOM オブジェクトにデフォルトの「伝播停止」ハンドラーを追加して、特定のハンドラーを持たないイベントのバブルアップを停止します。
または、それらのイベントに関心のない要素に対して多くのイベントをトリガーするのではなく、それらのイベントに関心のある要素でのみイベントをトリガーするための他の良い方法はありますか?