2012-02-13 26 views
2

我想要习惯Ember.js和Handlebars,但有一个问题令我困惑。我可能只是想念一些东西,但已经有一段时间了,并且找不到任何错误。Ember.js助手没有正确识别参数

我有简单的模板波纹管:

<header> 

    <h2><a href="#" class="link-box-title">{{project.pid}}-{{projectWindowTitle project}}</a></h2> 

</header> 

第{{project.pid}}正确输出project.pid价值,我想这个项目对象传递给辅助函数波纹管:

Handlebars.registerHelper('projectWindowTitle', function(proj) { 

    var info = proj.pid; 
    return info; 

}); 

我过于简化了帮助,但结果总是相同的,助手简化版,返回任何东西:

<a href="#" class="link-box-title"><script id="metamorph-9-start" type="text/x-placeholder"></script>S2S<script id="metamorph-9-end" type="text/x-placeholder"></script>-</a> 

我在做什么错?

回答

5

当使用ember.js中的句柄时,帮助者签名与“普通”句柄有点不同。主要区别在于在调用帮助器之前,参数不是“已解决”的。

为你的榜样,凸出是“项目”,所以你必须得从视图“项目”的价值:

Handlebars.registerHelper('projectWindowTitle', function(property, options) { 
    var project = Ember.getPath(this, property); 
    var info = project.get("pid"); 
    return info; 
}); 
+1

迈克尔在你需要从助手里解决'project'对象,因为参数作为名称传递正确的。我认为这将工作,一旦你改变项目分配到'var project = Ember.get(this,property);'。 – 2012-02-13 15:31:36

+0

感谢您指出我的错字丹,我纠正了它! – 2012-02-13 15:39:35

+0

谢谢,工作完美! – 2012-02-13 16:04:37

1

我知道这个问题已经接受了答案,但..这是不正确的方法:)

正如ember docs所述,正确的方式创建把手助手的烬是有点不同,你会做的把手。

线沿线的东西:

Ember.Handlebars.helper('projectWindowTitle', function(value) { 
    var escaped = Handlebars.Utils.escapeExpression(value.pid); 
    return new Handlebars.SafeString(escaped); 
});