Informática Numaboa - Tutoriais e Programação
Conflito jQuery-MooTools
Sab 6 Dez 2008 13:57 |
- Detalhes
- Categoria: Javascript
- Atualização: Sábado, 06 Dezembro 2008 15:36
- Autor: vovó Vicki
- Acessos: 8732
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() ( 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
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
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
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ó