Estou chamando um serviço da web que retorna uma matriz de objetos em JSON. Quero pegar esses objetos e preencher um div com HTML. Digamos que cada objeto contenha um url e um nome.
Se eu quisesse gerar o seguinte HTML para cada objeto:
<div><img src="the url" />the name</div>
Existe uma prática recomendada para isso? Posso ver algumas maneiras de fazer isso:
- Cordas concatenadas
- Crie elementos
- Use um plugin de templates
- Gere o html no servidor e depois sirva via JSON.
Respostas:
As opções 1 e 2 serão suas opções diretas mais imediatas, no entanto, para ambas as opções, você sentirá o impacto no desempenho e na manutenção ao construir strings ou criar objetos DOM.
A modelagem não é tão imatura, e você está vendo uma janela pop-up na maioria dos principais frameworks Javascript.
Aqui está um exemplo no JQuery Template Plugin que irá economizar o impacto de desempenho e é muito, muito simples:
Eu digo ir pelo caminho legal (e com melhor desempenho, mais sustentável) e usar modelos.
fonte
Se você absolutamente tiver que concatenar strings, em vez do normal:
use uma matriz temporária:
Usar matrizes é muito mais rápido, especialmente no IE. Eu fiz alguns testes com strings há algum tempo com o IE7, Opera e FF. O Opera demorou apenas 0,4s para realizar o teste, mas o IE7 não terminou depois de 20 MINUTOS !!!! (Não, não estou brincando.) Com o array o IE foi muito rápido.
fonte
Qualquer uma das duas primeiras opções é comum e aceitável.
Vou dar exemplos de cada um no Prototype .
Abordagem # 1:
Abordagem # 2:
fonte
Talvez uma abordagem mais moderna seja usar uma linguagem de modelos, como Mustache , que tem implementações em muitas linguagens, incluindo javascript. Por exemplo:
Você ainda obtém um benefício adicional - pode reutilizar os mesmos modelos em outros lugares, como o servidor.
Se precisar de modelos mais complicados (instruções if, loops, etc.), você pode usar o Handlebars, que tem mais recursos e é compatível com o Mustache.
fonte
Aqui está um exemplo, usando meu plug-in Simple Templates para jQuery:
fonte
Você pode adicionar o modelo HTML à sua página em um div oculto e, em seguida, usar cloneNode e os recursos de consulta da sua biblioteca favorita para preenchê-lo
fonte
Divulgação: Eu sou o mantenedor do BOB.
Existe uma biblioteca javascript que torna esse processo muito mais fácil, chamada BOB .
Para seu exemplo específico:
Isso pode ser gerado com BOB pelo código a seguir.
Ou com a sintaxe mais curta
Esta biblioteca é bastante poderosa e pode ser usada para criar estruturas muito complexas com inserção de dados (semelhante ao d3), por exemplo:
O BOB atualmente não suporta a injeção de dados no DOM. Isso está no todolist. Por enquanto, você pode simplesmente usar a saída junto com JS normal ou jQuery e colocá-la onde quiser.
Fiz esta biblioteca porque não fiquei satisfeito com nenhuma das alternativas como jquery e d3. O código é muito complicado e difícil de ler. Trabalhar com o BOB é, na minha opinião, o que obviamente é tendencioso, muito mais agradável.
O BOB está disponível no Bower , então você pode obtê-lo executando
bower install BOB
.fonte
1) Esta é uma opção. Construa o html com JavaScript no lado do cliente e, em seguida, injete-o no DOM como um todo.
Observe que há um paradigma por trás dessa abordagem: o servidor emite apenas dados e (no caso de interação) recebe dados do cliente assincronamente com solicitações AJAX. O código do lado do cliente opera como um aplicativo da web JavaScript autônomo.
O aplicativo da web pode operar, renderizar a interface, mesmo sem o servidor estar ativo (é claro que não exibirá nenhum dado ou oferecerá qualquer tipo de interação).
Esse paradigma está sendo adotado com frequência ultimamente, e frameworks inteiros são construídos em torno dessa abordagem (consulte backbone.js, por exemplo).
2) Por motivos de desempenho, quando possível, é melhor construir o html em uma string e, em seguida, injetá-lo como um todo na página.
3) Essa é outra opção, além de adotar um framework de Web Application. Outros usuários postaram vários mecanismos de modelos disponíveis. Tenho a impressão de que você tem competência para avaliá-los e decidir se segue ou não por esse caminho.
4) Outra opção. Mas sirva como um texto simples / html; porque JSON? Não gosto dessa abordagem porque mistura PHP (sua linguagem de servidor) com Html. Mas eu adoto isso frequentemente como um meio-termo razoável entre as opções 1 e 4 .
Minha resposta: você já está olhando na direção certa.
Sugiro adotar uma abordagem entre 1 e 4, como eu. Caso contrário, adote uma estrutura da web ou mecanismo de modelagem.
Apenas minha opinião baseada na minha experiência ...
fonte