2012-10-29 28 views
3

我想在我的Ember.js应用程序中注册一个Handlebars.js助手,该程序允许我传递一个视图属性,该属性是一个简单的html字符串,不会被转义。我的模板看起来是这样的:如何将属性传递给Handlebars帮手

<span class="add-on">{{log view.append}}{{safeMarkup view.append}}</span> 

在这种情况下,日志语句正确输出HTML字符串到控制台,像<span>text</span>

我的帮手,safeMarkup,如下:

Handlebars.registerHelper('safeMarkup', (string) -> 
    return new Handlebars.SafeString(string) 
) 

然而,什么被渲染的不是view.append财产,但字符串“view.append”本身的价值!像这样:<span class="add-on">view.append</span>。任何想法这里有什么问题? 感谢

+0

可以与'unbound' helper做同样的事情(请参阅http://goo.gl/OenIM),但我不知道为什么它是字符串而不是直接属性。 – louiscoquio

+0

'view.append'是什么? 'console.log(string)'在你的帮手里说什么? –

+0

它的字符串'view.append',只是看看这里:http://jsfiddle.net/E8UzU/ – louiscoquio

回答

2

在车把:

{{span 'className'}} 

在应用程序:

Handlebars.registerHelper('span', function(className) { 
    return new Handlebars.SafeString("<span class='"+Handlebars.Utils.escapeExpression(className)+"'></span>"); 
}); 
+0

添加一些解释,这将有助于这个答案 – dove

+0

作出了一些改变 – lesyk