6

イベントハンドラーをバインドし、jQueryでそのハンドラーをすぐに実行する必要があることがよくあります。これまで、私はこの怠惰なフェイクパターンを使用してコードをDRYに保ちました。

$(...).bind('event', function() {
    ...
}).trigger('event');

今日は、他のハンドラーがすでにバインドされていてevent、このようにイベントをトリガーしたときにも実行されたため、これに噛まれましたが、想定外だったため、多くの問題が発生しました。その時に実行されました。

この問題を解決するために、パターンを次のように変更しました。

var handler = function() {
    ...
};

var element = $(...);

element.bind('event', handler);
handler.call(element);

これは私が期待するように機能しますが、罪のように醜く、非常に冗長なので、このパターンをjQueryプラグインにカプセル化することを検討しています。

$(...).bindAndExecute('event', function() { ... });

jQuery.bind()オプションや他の方法でこれに相当するものを見つけることができませんでしたが、何かを逃した可能性があります。私が考えていなかった、これを行うためのより簡潔な方法はありますか?車輪の再発明はしたくありません。

4

1 に答える 1

3

jQuery は、イベントの名前空間をサポートしています。これは非常に便利なテクニックで、バインドを解除したり、特定のイベント グループをトリガーしたりする場合に非常に便利です。

$(...).bind('event.myNamespace', function() {
    ...
}).trigger('event.myNamespace');

大規模なアプリケーションや jQuery プラグインを開発している場合、この手法を使用することはほとんど避けられません (または、少なくとも分別のある人は避けることはできません)。

クイック jsFiddle デモ

于 2012-07-10T19:56:14.213 に答える