evento expedição jQuery de um plug-in para vários ouvintes
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.
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] })