这是我使用 Handlebars 的前几个小时,所以我可能错过了一些东西,但是.....
使用这样的数据: {status: {"200": 4, "304": 10}} 似乎无法访问那些以整数的字符串表示作为键的条目。 这个模板对我不起作用(使用 1.0.3beta 包):
{{#with status}}
{{#if 200}} 好的:{{ 200 }} {{/if}}
{{/和}}
{{ 200 }} 导致解析错误“EXPECTING ID”。 当模板包含:{{ "200" }} 时也会发生同样的情况。 奇怪的是 {{#if 200}} 似乎工作正常。
在 Handlebars 中,整数标记为 INTEGER。 您可以通过将它们括在括号中来使任何字符序列起作用:
{{#with status}}
{{#if [200] }} OK: {{ [200] }} {{/if}}
{{/with}}
很高兴知道括号可以作为一种解决方法,但我想指出这种行为破坏了与 mustache 的向后兼容性。
我有胡子模板,我可以通过文字索引访问数组元素:
{{someArray.0}}
然而,当我尝试将我的应用程序从 mustache 迁移到车把时(假设模板应该都可以工作),我发现自己有很多错误
`期待'ID',得到'INTEGER'``
幸运的是,将这些表达式更改为
{{someArray.[0]}}
解决了这个问题。 也许值得稍微扩展语言以支持这种与胡子兼容的表达。
谢谢
@santip我很困惑。 Mustache 根本不支持路径,所以你怎么能在 mustache 中做 {{someArray.0}} ?
哇,我的错,好吧,我实际上在使用 hogan.js 并且不知道它不支持 mustache。
顺便说一句,当从 hogan.js 迁移时,我还注意到冒泡似乎不像在 hogan(或 mustache)中那样有效:
Handlebars.compile('aaa {{a}} {{#b}}{{c}}{{d}}{{/b}}')({a:1, b:[{c:2}], d:3}) == 'aaa 1 2'
Hogan.compile('aaa {{a}} {{#b}}{{c}}{{d}}{{/b}}').render({a:1, b:[{c:2}], d:3}) == 'aaa 1 23'
Mustache.render('aaa {{a}} {{#b}}{{c}}{{d}}{{/b}}', {a:1, b:[{c:2}], d:3}) == 'aaa 1 23'
它在我使用 ../ 时有效,这就是我切换到 Handlebars 的原因,但我认为值得指出那里缺乏兼容性。
另外我刚刚测试了胡子,它似乎支持路径
Mustache.render('aaa {{a}} {{b.c}}', {a:1, b:{c:2}, d:3}) == 'aaa 1 2'
是的,mustache 支持路径。 检查https://github.com/mustache/spec/blob/master/specs/sections.yml 中的# Dotted Names
似乎小胡子一直在添加功能。 我不确定我是否注册了永远跟踪 Mustache 规范:/
它看起来不像 Mustache 规范描述了.<integer>
。 我绝对可以完成这项工作,尽管 Handlebars 的foo.[anything]
对非标识符路径效果更好。
我最初的计划是“如果它在 JS 中是一个有效的点路径,它就可以在 Handlebars 中工作”。
有什么理由不支持.<integer>
路径表示法吗?
我认为您不应该支持冒泡,因为它可能会破坏许多现有的把手模板,尽管您可能应该更新文档和站点以告知这些不兼容问题,以免为进行迁移的人们带来麻烦。
我在尝试使用{{1}}
形式的标识符时遇到了这个问题,它在 Mustache 和 Hogan 中编译得很好,但在 Handlebars 中抛出Expecting 'ID', 'DATA', got 'NUMBER'
。 尽管我希望支持整数,但我完全理解并支持仅使用有效 JS 点路径语法的@wycats方法。
但是,我确实认为文档应该反映这一点。 他们目前表示:
Identifiers may be any unicode character except for the following:
Whitespace ! " # % & ' ( ) * + , . / ; < = > @ [ \ ] ^ ` { | } ~
我认为这是误导,因为整数无效。 正如所建议的那样,更清楚地说“如果它是 JS 中的有效点路径,则它可以在 Handlebars 中工作”。
最有用的评论
很高兴知道括号可以作为一种解决方法,但我想指出这种行为破坏了与 mustache 的向后兼容性。
我有胡子模板,我可以通过文字索引访问数组元素:
{{someArray.0}}
然而,当我尝试将我的应用程序从 mustache 迁移到车把时(假设模板应该都可以工作),我发现自己有很多错误
`期待'ID',得到'INTEGER'``
幸运的是,将这些表达式更改为
{{someArray.[0]}}
解决了这个问题。 也许值得稍微扩展语言以支持这种与胡子兼容的表达。
谢谢