7

過去に、ウィンドウにバインドすることにより、jQuery で非常に単純な pub/sub を実行しました。

// subscribe
$( window ).on("someEvent", function() { ... });

// publish
$( window ).trigger("someEvent");

しかし、私は最近、新しいコールバック機能について知りました。これは、jQuery で pub/sub を処理するための推奨される方法のようです。

ウィンドウにバインドするだけではなく、コールバックを使用する利点は何ですか? 上記のような単純なシステムの場合、Callback 機能を使用するのはやり過ぎですか?

編集:上記を一般的にどのように使用するかについて、もう少し情報があります...

これは、jQuery プラグインが相互に通信できるようにするために時々行うことです。たとえば、通信する必要がある独自のドラッグ アンド ドロップ可能なプラグインがあります。

ドラッグが開始、更新、および停止すると、ドラッグ可能なプラグインがウィンドウでカスタム イベントをトリガーします。ドロップ可能なプラグインはこれらのイベントを監視し、それに応じて反応します。

// in draggable

onStart: function() {
  $( window ).trigger("dragger.start", [data]);
}

// in droppable

$( window ).on("dragger.start", function(event, data) {
...
});
4

2 に答える 2

1

ウィンドウへのバインド自体は問題ありませんが、他のイベントをウィンドウにバインドしたり、ウィンドウからバインド解除したりできるため、意図しない副作用がシステムに発生する可能性があります。たとえば、やなどのより一般的なイベントのバインドを解除することが意図されていたとしても、$(window).off()はバインドを解除します。"someEvent""scroll""click"

Callbacks を使用するのがやり過ぎだとは言いません。なぜなら、それは比較的単純だからです。

var callbacks = $.Callbacks();
callbacks.add(function () { ... });
callbacks.fire();

サンプル コードを置き換えるために必要なのはこれだけです。すぐにわかる利点の 1 つは、トリガー フェーズでトリガーする必要があるイベントの名前を知る必要がないことです。より透過的に処理されます。これは多くの場合、優れています。

複数の関数呼び出しを 1 つのコールバックに追加したり、複数のコールバックを同時に持つこともできます。を使用しているだけの場合、これを行うのは困難ですwindow

于 2012-12-17T20:02:19.780 に答える
1

jQuery のコールバック ($.Callbacks()) を使用すると、関数をウィンドウにバインドする方法よりもはるかにクリーンなコードになり、はるかに整理されると思います。コールバックを起動するときに使用するイベントの名前を知る必要がないため、柔軟性が向上します。

于 2012-12-17T20:07:55.690 に答える