Событие отправки jQuery из плагина для нескольких слушателей - PullRequest
3 голосов
/ 05 октября 2009

Я ищу способ отправки события из моего плагина jQuery, чтобы он мог иметь несколько прослушивателей для этого события. У меня есть настройка плагина, чтобы он возвращал ссылку на себя, чтобы позже я мог добавить слушателей с помощью открытых методов.

Единственные примеры, которые я видел до сих пор, имеют один обработчик событий, например ::100100

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

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

Это мой единственный вариант, который я собирался сделать, просто иметь массив зарегистрированных обработчиков событий и вызывать каждый из них, или я упускаю лучшую альтернативу.

Ответы [ 2 ]

2 голосов
/ 05 октября 2009

Я бы пошел с бросанием массива в объект конструктора / параметров. Вот как это обычно делается:

$("").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]();
    });
};
0 голосов
/ 05 октября 2009

почему бы не использовать массив и перебрать его? Приведенный ниже код будет принимать как массив, так и один обработчик событий.

$.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] })
...