Handlebars.js: 不能使用整数字符串作为 id

创建于 2011-06-27  ·  10评论  ·  资料来源: handlebars-lang/handlebars.js

这是我使用 Handlebars 的前几个小时,所以我可能错过了一些东西,但是.....

使用这样的数据: {status: {"200": 4, "304": 10}} 似乎无法访问那些以整数的字符串表示作为键的条目。 这个模板对我不起作用(使用 1.0.3beta 包):

{{#with status}}
{{#if 200}} 好的:{{ 200 }} {{/if}}
{{/和}}

{{ 200 }} 导致解析错误“EXPECTING ID”。 当模板包含:{{ "200" }} 时也会发生同样的情况。 奇怪的是 {{#if 200}} 似乎工作正常。

最有用的评论

很高兴知道括号可以作为一种解决方法,但我想指出这种行为破坏了与 mustache 的向后兼容性。

我有胡子模板,我可以通过文字索引访问数组元素:

{{someArray.0}}

然而,当我尝试将我的应用程序从 mustache 迁移到车把时(假设模板应该都可以工作),我发现自己有很多错误

`期待'ID',得到'INTEGER'``

幸运的是,将这些表达式更改为

{{someArray.[0]}}

解决了这个问题。 也许值得稍微扩展语言以支持这种与胡子兼容的表达。

谢谢

所有10条评论

在 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 中工作”。

http://handlebarsjs.com/expressions.html

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

fcpauldiaz picture fcpauldiaz  ·  4评论

nknapp picture nknapp  ·  3评论

LengYXin picture LengYXin  ·  3评论

snimavat picture snimavat  ·  5评论

ustun picture ustun  ·  6评论