全球助手正在重写流星车把模板中的本地环境

时间:2013-06-02 06:47:20

标签: javascript coffeescript meteor handlebars.js

更新:所选答案中记录的错误已由流星开发者修复

在我的流星应用程序中,我有一些coffescript作为全球帮手:

Handlebars.registerHelper "title",->
    Session.get("title")

和一块模板:

{{#each edited}}
    <li><a class="left-nav" href="{{entryLink this}}">{{this.title}}</a></li>
{{/each}}

this.title被全局帮助器覆盖,而不是使用this.title上下文。 (我知道,因为如果我删除全局帮助器,那么它很有效)

如果我添加以下内容:

Handlebars.registerHelper "debug", ->
    console.log this
    console.log this.title

这样的模板:

{{#each edited}}
    <li><a class="left-nav" href="{{entryLink this}}">{{this.title}}{{debug}}</a></li>
{{/each}}

this.title正确打印到控制台,但未插入模板

知道为什么会发生这种情况或如何使“this.title”来自本地环境

2 个答案:

答案 0 :(得分:3)

对我来说,这似乎是一个错误,因为https://github.com/meteor/meteor/wiki/Handlebars#expressions-with-dots说:

  

this开头的路径始终引用当前数据上下文的属性,而不是辅助程序。

我提交了一个问题:https://github.com/meteor/meteor/issues/1143

答案 1 :(得分:0)

我今天在handlebarsjs.com网站上看到了这个。试一试:

  

Handlebars还允许帮助程序之间解析名称冲突   和数据字段通过以下引用:

{{。/ name}}或{{this / name}}   或{{this.name}}

上述任何一项都会导致名称字段开启   要使用的当前上下文而不是同名的帮助程序。