2011-08-23 65 views
51

我在Handlebars中创建了一个帮助逻辑的帮手,但是我的模板将返回的HTML解析为文本而不是html。把手模板作为文本呈现模板

我有测验完成后所呈现的测验结果页面:

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

对于每一个回合,我用一个助手来确定渲染一轮的结果是模板:

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

这里是描述正确的圆形模板(让我们说,它呈现的#圆钢,最终正确的模板):

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

这里是获取呈现:

<div></div> 

还不如HTML,但为文本。我如何得到它实际呈现HTML为HTML,而不是文本?

回答

147

我认为在Handlebars中使用与在香草小胡子中一样的功能。 在这种情况下使用三联的胡子来反转义HTML,I,E:{{{unescapedhtml}}},如:

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

对裁判看到: http://mustache.github.com/mustache.5.html

+0

当使用2个参数的registerBoundHelper时,此方法对我无效。但“返回新的Handlebars.SafeString(结果);”为我工作。 – Presse

+0

这是反应? – Sebastian

19

吉尔特 - 扬的答案是正确的,但仅供参考你也可以直接在帮手里设置结果为“安全”(代码来自handlebars.js wiki)

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

有了这个,你可以使用普通的双把手{{}}和把手不会逃脱你的表情。