全局助手正在覆盖流星车把模板中的本地上下文

Posted

技术标签:

【中文标题】全局助手正在覆盖流星车把模板中的本地上下文【英文标题】:global helper is overriding local context in meteor handlebars template 【发布时间】:2013-05-28 15:26:04 【问题描述】:

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

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

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.titledebug</a></li>
/each

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

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

【问题讨论】:

我能问一下为什么您在模板中使用this 而不仅仅是title'? Is title a field in your edited` 项 title 是我编辑的项目中的一个字段...我已将标题映射到全局帮助程序,因为我在各种模板中使用它...使用 #each 我想迭代它相同的标题属性(但对于所有现有页面而不仅仅是当前页面)...如果我在 #each 中使用 title 全局帮助程序仍然会覆盖并且我多次打印出当前标题(至少我认为确实如此,我最好检查一下!) 重命名助手不是更容易吗? 是的,但那我要抱怨什么? 【参考方案1】:

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

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

./name 或 this/name 或 this.name

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

【讨论】:

我会尝试 ./name 和 this/name 但从我的示例中可以看出 this.name 是我目前使用的,它不工作 我认为问题可能是车把没有完全实现或者它是一个错误。缺少像 @keys@index 这样的车把功能。通过在meteor-talk 上发布问题可能会得到更好的答案 在我发帖之前我确实在那里发过帖...仍然没有收到那里任何人的任何消息...groups.google.com/forum/?fromgroups=#!topic/meteor-talk/… Ember.js 的家伙让它工作了。试试 Meteor 吗? ***.com/questions/12366848/… 我认为这是相反的问题...在链接中,由于模板正在查找模板的本地属性而不是使用全局帮助器,因此该人无法让全局帮助器工作.我想使用本地上下文属性而不是同名的全局助手。在我的示例中,我认为“this.property”的使用会明确表明应该使用本地属性而不是全局帮助器。【参考方案2】:

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

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

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

【讨论】:

我刚刚检查了问题,他们发现了错误并修复了它......再次感谢!

以上是关于全局助手正在覆盖流星车把模板中的本地上下文的主要内容,如果未能解决你的问题,请参考以下文章

如何在流星的车把助手中使用多个参数?

“this”似乎在车把“每个”助手中的旧迭代中具有价值(在 mandrill 模板中使用)

如何将主干视图连接到流星车把模板?

车把部分与渲染与模板

如何在车把 ember 中定义自定义助手

在 coffeescript 类中包装meteor.js 车把模板