2011-08-19 11 views
6

OK. Mi HTML se ve a continuación.Handlebar.js no actualiza mi plantilla

<div id="json"></div> 

<div id="content-placeholder"> 
    <script id="some-template" type="text/x-handlebars-template"> 
    <table> 
     <thead> 
     <th>col 1</th> 
     <th>col 2</th> 
     </thead> 
     <tbody> 
     {{#results}} 
     <tr> 
      <td>{{col_1}}</td> 
      <td>{{col_2}}</td> 
     </tr> 
     {{/results}} 
     </tbody> 
    </table> 
    </script>      
</div> 

Y estoy llenando el anterior a través de Handlebar.js y los datos se reciben del servidor. Aquí está el código.

$.get(get_data_url, function(data) 
{ 
    $('#json').empty().append(data); 
    var rows = eval('(' + data + ')'); 

    var source = $("#some-template").html(); 
    var template = Handlebars.compile(source);         
    $("#content-placeholder").empty().append(template(rows)); 
}); 

Cuando el código se ejecuta por primera vez, se ve bien. Pero cuando llamo $ .get por segunda vez (y así sucesivamente), la plantilla no se actualiza con los datos nuevos.

También imprimo toda la cadena de datos, para asegurarme de que los datos se actualizan desde el servidor y lo es.

Cuando reviso mi Chrome, me dice "UnEught TypeError: no se puede llamar al método 'coincidencia' de null".

¿Tiene algo que ver con "compilar"?

Respuesta

5

La primera vez que hace esto:

$("#content-placeholder").empty()... 

Su <div> se convierte en esto:

<div id="content-placeholder"> 
</div> 

y su plantilla se ha ido. Mueva su plantilla:

<script id="some-template" type="text/x-handlebars-template"> 
    ... 
</script> 

a algún lugar fuera #content-placeholder.

+0

oh hombre. Soy una herramienta. Gracias por tu ayuda. :) – ericbae

+3

O puede mover este bloque: 'var source = $ (" # some-template "). Html();' 'var template = Handlebars.compile (fuente);' fuera del '$. get() 'callback, por lo que solo busca la plantilla y compila una vez, ahorrando recursos/velocidad. –

+0

@GarciaWebDev: Sí, ese es un buen punto. Por lo general, entierro todo esto dentro de un administrador de plantillas simple que se ocupa de la compilación y el almacenamiento en caché en el primer uso. Sin embargo, sigo pensando que es una buena idea no mezclar las plantillas y el contenido. –

Cuestiones relacionadas