我正在尝试习惯Ember.js和Handlebars,但有一个问题令我感到困惑。我可能只是错过了一些东西,但已经使用了很长一段时间并且找不到任何错误。
我有简单的模板:
<header>
<h2><a href="#" class="link-box-title">{{project.pid}}-{{projectWindowTitle project}}</a></h2>
</header>
第一个{{project.pid}}正确输出project.pid值,我想将项目对象传递给helper函数:
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>
我做错了什么?
答案 0 :(得分:5)
在ember.js中使用把手时,助手签名与“普通”把手略有不同。主要区别在于,在调用帮助程序之前,参数不会被“解析”。
对于您的示例, proj 是“project”,因此您必须从视图中获取“project”的值:
Handlebars.registerHelper('projectWindowTitle', function(property, options) {
var project = Ember.getPath(this, property);
var info = project.get("pid");
return info;
});
答案 1 :(得分:1)
我知道这个问题已经接受了答案但是......这不是正确的做法:)
正如ember docs所述,为斗篷制作把手助手的正确方法与你在把手中的做法略有不同。
有些事情:
Ember.Handlebars.helper('projectWindowTitle', function(value) {
var escaped = Handlebars.Utils.escapeExpression(value.pid);
return new Handlebars.SafeString(escaped);
});