2011-08-23 4 views
51

Ho creato un helper in Handlebars per aiutare con la logica, ma il mio modello analizza il codice HTML restituito come testo anziché come html.Handlebars Modello di rendering modello come testo

ho una pagina dei risultati del quiz che è resa dopo che il quiz è completato:

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

Per ognuno dei turni, io uso un aiutante per determinare quale template usare il risultato di un round:

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"); 
    } 
    }); 

Ecco un modello che descrive un corretto rotonda (diamo dicono che rendeva la # modello round-end-corretto):

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

Ecco ciò che viene reso:

<div></div> 

Non come HTML, ma come testo. Come faccio a renderlo in realtà il rendering HTML come HTML, piuttosto che il testo?

risposta

147

Suppongo che il disimpegno in Handlebars funzioni come nei vaniglia Moustache. In tal caso usano baffi triple unescape html, I, E: {{{unescapedhtml}}}, come:

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

per vedere ref: le risposte di http://mustache.github.com/mustache.5.html

+0

Questo metodo non funzionava per me quando si utilizza registerBoundHelper con 2 parametri. Ma "restituisci nuovo Handlebars.SafeString (risultato);" ha funzionato per me – Presse

+0

è questo reattivo? – Sebastian

19

Geert-Jan è corretto, ma solo per riferimento puoi anche impostare il risultato su "sicuro" direttamente all'interno dell'helper (codice da wiki di handlebars)

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 questo puoi usare normali doppi manubri {{}} e il manubrio non sfugge alla tua espressione.