5

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

在我的流星应用程序中,我有一些制作全局助手的咖啡脚本:

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”来自本地上下文

4

2 回答 2

3

对我来说看起来像一个错误,因为https://github.com/meteor/meteor/wiki/Handlebars#expressions-with-dots说:

以开头的路径this总是引用当前数据上下文的属性而不是助手。

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

于 2013-06-11T20:19:17.820 回答
1

我今天在 handlebarsjs.com 网站上读到了一些关于此的内容。试试这个:

Handlebars 还允许通过 this 引用解决助手和数据字段之间的名称冲突:

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

以上任何一项都会导致使用当前上下文中的 name 字段,而不是使用同名的助手。

于 2013-06-03T18:19:57.117 回答