Informática Numaboa - Tutoriais e Programação

Conflito jQuery-MooTools

Sab

6

Dez

2008


13:57

  • Imprimir
(15 votos, média 4.93 de 5) 


Existem duas bibliotecas de javascript que caíram no gosto dos programadores, a jQuery e a MooTools. Ambas são excelentes, mas a convivência delas não é muito amigável devido a um pequeno detalhe: por causa de um cifrão as duas se estranham. Parece brincadeira, mas mais uma vez o $ é o culpado!

A origem do problema

Os autores da MooTools resolveram chamar a função mestra da biblioteca de $. Nada a ver com dinheiro, foi só para ganhar tempo na hora de programar. Acontece que o John Resig, autor da jQuery, teve a mesma idéia.

Se incorporarmos estas duas bibliotecas num documento e criarmos scripts usando a função $, a caca está feita. Se a MooTools tiver sido incorporada depois da jQuery, o browser considera a função $ como sendo da MooTools. No momento em que chamarmos uma função da jQuery que depende da função $, é gerado um erro e a coisa não vai funcionar. O inverso também é válido. Se a jQuery tiver sido incorporada depois da MooTools, quem não funciona é a MooTools pelo mesmo motivo: conflito de referência.

Como sair dessa

Parece que o John Resig já sabia que poderia dar pau, não só com a MooTools, mas com qualquer outra biblioteca que tivesse uma função chamada $. Para nossa sorte, ele deixou uma saída preparada. Na verdade, o $ é apenas um apelido para a função mestra da jQuery, que leva o mesmo nome. Podemos então usar tanto $() como jQuery() (info ATENÇÃO, o nome da função é jQuery e não jquery ou Jquery).

Ah! É só isto? Então a coisa está resolvida. É só usar sempre a função jQuery para a jQuery e a função $ para a MooTools! Acontece que isto ainda não é tudo. A coisa pode estar resolvida para o programador, mas o browser vai continuar perdidinho da silva. Justamente para atender esta segunda necessidade, o John deixou uma função chamada noConflict(). Esta função deve ser acionada tão logo a biblioteca jQuery tenha sido incorporada. Ela devolve a referência $ para que o browser não se confunda e para abrir espaço para outras bibliotecas. Bonzinho este autor smile

...

Finalmentes

Gastei um tempo enorme procurando referências a um erro que insistia em ficar aparecendo quando estava depurando documentos com o firebug. A mensagem dizia el.set is not a function, erro na linha 23 de mootools.js. Revisei a dita linha um montão de vezes e não conseguia achar nada de errado. Agora, sabendo do que se trata, sei que nunca iria achar o erro simplesmente porque a linha 23 não tem erro nenhum smile

Mais uma coisa: como sempre, a resposta para solucionar este problema estava no lugar mais óbvio - no site da jQuery sob o título Interoperability. Pelo número de referências que achei para este erro no Google e pela falta de soluções (palpite tem de monte), acho que não foi só comigo que demorou a cair a ficha. Foi só quando vi este trecho pela milésima vez

... el = document.createElement(el); } el = $(el); return (!props || !el) ? el : el.set(props); } ...

que o detalhe el = $(el) me chamou a atenção. Ué, o mootools com cara de jquery, os dois usando o cifrão? Só pode dar zebra mesmo...

Abraço da vó vovo

mfx broker выплатыкисть для консилераооо полигон киев отзывыноутбуки acerпогода синоптик харьковноутбукиМунтян