3

jQuery プラグインからイベントをディスパッチして、そのイベントに対して複数のリスナーを持つことができるようにする方法を探しています。後で public メソッドを介してリスナーを追加できるように、それ自体への参照を返すようにプラグインをセットアップしました。

これまでに見た唯一の例には、単一のイベント ハンドラーがあります。

$.fn.foo = function( options ) {
    ...
    // trigger event
    options.eventHandler();
}

$('#bar').foo({ eventHandler: myEventHandler })

私がやろうとしていた唯一のオプションは、登録されたイベントハンドラーの配列を用意してそれぞれを呼び出すか、より良い代替手段がありません。

4

2 に答える 2

2

コンストラクター/オプションオブジェクトに配列をスローします。通常は次のようにします。

$("").plugIn(
{
    prop: "value",
    foo: "bar",
    eventsToFire: [
        function () { },
        function () { },
        function () { }
    ]
});

そして、プラグインは次の行に沿って何かを行います:

コレクションで実行されるはずのプラグインを書いていると仮定します。

jQuery.fn.plugIn = function (options)
{
    return this.each(function ()
    {
        var i = options.eventsToFire.length;

        while (i--) options.eventsToFire[i]();
    });
};
于 2009-10-05T15:01:23.370 に答える
0

配列を使用してそれをループしてみませんか? 以下のコードは、配列と単一のイベント ハンドラーの両方を受け入れます。

$.fn.foo = function( options ) {
    ...
    // trigger event
    if(typeof eventHandler == "Array"){
      for(var i=0; i<eventHandler.length; i++){
        options.eventHandler[i]();
      }
    }else{
      options.eventHandler();
    }
}

$('#bar').foo({ eventHandler: [myEventHandler, anotherEventHandler] })
于 2009-10-05T10:35:02.830 に答える