Corrigindo um projeto com várias estruturas JavaScript
-
20-09-2019 - |
Pergunta
Acabei de iniciar um novo trabalho, e minha primeira tarefa é limpar o código JavaScript para o site - o problema é que existem duas bibliotecas JS sendo usadas (jQuery e protótipo / scriptaculoso).
Estou tentando descobrir o que está sendo usado onde, mas é muito difícil, especialmente não estar muito familiarizado com o código.
Alguém tem alguma sugestão? Eu provavelmente preferiria soltar protótipo / scriptaculoso, se possível.
Solução
Eu lixo protótipo de todos inclui em todas as páginas, removeria o noconflict no jQuery e depois mantenha o Firebug pronto para me mostrar todos os erros e passar por todas as páginas uma a uma, substituindo funções por equivalentes de jQuery, até que as coisas funcionassem corretamente.
..Pain in the Butt Method, mas duvide que você achará menos doloroso. Pode ser útil: http://api.jquery.com/browser/
Outras dicas
Eu não sugeriria abandonar uma biblioteca JavaScript, pois isso seria uma mudança transversal. Muito perigoso e causará insetos espúrios agora e no futuro.
Provavelmente, esse protótipo usará o $
variável, e esse jQuery estará executando noConflict
modo, para que seja referenciado pelo jQuery
variável.
Pode ficar complicado, por exemplo:
// here $ = Prototype
jQuery(function($){
// here $ = jQuery
});
// here $ = Prototype
E em arquivos separados:
// here $ = Prototype
(function($){
// here $ = jQuery;
})(jQuery);
// here $ = Prototype
É realmente importante prestar atenção ao seu contexto para ver qual biblioteca está sendo referenciada. Além disso, é perfeitamente aceitável Para fazer perguntas aqui se você é perplexo sobre como fazer algo no jQuery que foi feito no protótipo.
Livrar -se do protótipo em particular poderia ser perverso, especialmente se houvesse pessoas trabalhando na base de código que realmente "obtiveram" o protótipo. Estou falando aqui sobre mim, tendo trabalhado em um aplicativo da Web muito grande que, de fato, tem exatamente a mistura que você descreve (embora eu pense que quando deixei as coisas do scriptaculoso se foi).
Devido à maneira como o protótipo funciona, pode haver dependências absolutamente em todos os lugares.
Esta é uma tarefa um pouco assustadora. A sugestão de viver e deixar viver as duas estruturas não é ruim, desde que as coisas estejam funcionando. É provável que o jQuery esteja em noConflict
Modo se eles são realmente residentes na mesma página.
Uma ferramenta muito útil é usar o Barra de ferramentas do desenvolvedor da web Para Firefox e navegue para uma página e faça: Information -> View JavaScript
- Isso lhe dará uma lista completa de todo o script JavaScript carregado com <script>
tags, bem como javascript embutido em <script>
Tags, embora eu ache que os manipuladores de eventos embutidos não estão listados lá.
Mas uma coisa que você pode fazer é simplesmente soltar protótipo ou javascript e ver qual acaba com menos erros. Então você está a caminho de depurar o que está faltando.
Isto é Mais fácil de padronizar em uma biblioteca, mas há um caso a ser feito para "se não estiver quebrado, também não conserte".
Levei algum tempo para aprender um pouco sobre todas as estruturas, fazendo os mesmos efeitos no HTML idêntico: Artlung Rosetta: Você pode mergulhar rápido nas diferenças entre sintaxes de protótipo e jQuery comparando isto e isto.
Boa sorte!