Pergunta

Eu estou procurando uma maneira de enviar um evento do meu plugin jQuery para que ele possa ter vários ouvintes para esse evento. Eu tenho a configuração do plug-in para que ele retorna uma referência a si mesmo para que eu possa adicionar ouvintes mais tarde através de métodos públicos.

Os únicos exemplos que eu vi até agora têm um único manipulador de eventos, por exemplo:.

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

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

É a minha única opção que eu ia fazer, simplesmente têm uma série de manipuladores de eventos registrados e chamar cada um deles, ou estou faltando uma alternativa melhor.

Foi útil?

Solução

Eu iria com jogando um array para a opções / object construtor. Esta é a forma como ele é normalmente feito:

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

E o plugin faria algo ao longo das linhas deste:

Assumindo que você está escrevendo um plugin que é suposto para ser executado em uma coleção.

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

        while (i--) options.eventsToFire[i]();
    });
};

Outras dicas

Por que não usar uma matriz e loop através dele? O código a seguir irá aceitar tanto uma matriz e um único manipulador de eventos.

$.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] })
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top