2011-08-23 10 views
51

Creé un ayudante en manubrios para ayudar con la lógica, pero mi plantilla analiza el html devuelto como texto en lugar de html.Plantilla de renderizado de plantillas de manillares como texto

Tengo una página de resultados de la prueba que se representa después de la prueba se ha completado:

<script id="quiz-result" type="text/x-handlebars-template"> 
     {{#each rounds}} 
      {{round_end_result}} 
     {{/each}} 
     <div class="clear"></div> 
    </script> 

Para cada una de las rondas, yo uso un ayudante para determinar qué plantilla se mostrará el resultado de una ronda:

Handlebars.registerHelper("round_end_result", function() { 
    if (this.correct) { 
     var source = ''; 
     if (this.guess == this.correct) { 
     console.log("correct guess"); 
     var source = $("#round-end-correct").html(); 
     } else { 
     var source = $("#round-end-wrong").html(); 
     } 
     var template = Handlebars.compile(source); 
     var context = this; 
     var html = template(context); 
     console.log(html); 
     return html; 
    } else { 
     console.log("tie"); 
    } 
    }); 

Aquí es una plantilla que describe una ronda correcta (tomemos decir que dictó la plantilla # ronda de extremo correcta):

<script id="round-end-correct" type="text/x-handlebars-template"> 
     <div></div> 
    </script> 

Aquí es lo que se rindió:

<div></div> 

No como HTML, pero como texto. ¿Cómo obtengo que realmente represente el HTML como HTML, en lugar de texto?

Respuesta

147

Supongo que unescaping en Handlebars funciona igual que en vanilla Moustache. En ese caso utilice bigotes triples a unescape html, i, e: {{{unescapedhtml}}}, como:

<script id="quiz-result" type="text/x-handlebars-template"> 
    {{#each rounds}} 
     {{{round_end_result}}} 
    {{/each}} 
    <div class="clear"></div> 

para ver ref: respuestas de http://mustache.github.com/mustache.5.html

+0

Este método no funcionaba para mí cuando usaba registerBoundHelper con 2 parámetros. Pero "return new Handlebars.SafeString (result);" trabajó para mi. – Presse

+0

es esto reactivo? – Sebastian

19

Geert-Jan es correcta, pero sólo para referencia también puede establecer el resultado como "seguro" directamente dentro del asistente (código de wiki de handlebars.js)

Handlebars.registerHelper('foo', function(text, url) { 
    text = Handlebars.Utils.escapeExpression(text); 
    url = Handlebars.Utils.escapeExpression(url); 
    var result = '<a href="' + url + '">' + text + '</a>'; 
    return new Handlebars.SafeString(result); 
}); 

Con eso puede usar manubrios dobles regulares {{}} y los manillares no escaparán a su expresión.

Cuestiones relacionadas