如何通过把手中的索引访问访问数组项?


270

我正在尝试在把手模板内的数组中指定项的索引:

{
  people: [
    {"name":"Yehuda Katz"},
    {"name":"Luke"},
    {"name":"Naomi"}
  ]
}

使用这个:

<ul id="luke_should_be_here">
{{people[1].name}}
</ul>

如果上述方法不可行,我该如何编写一个可以访问数组中特殊项目的助手?

Answers:


409

试试这个:

<ul id="luke_should_be_here">
{{people.1.name}}
</ul>

26
这没有记录在任何地方!太棒了
lukemh 2011年

25
我得到Expecting 'ID'的错误与{{user.links.websites.1}}或{{user.links.websites.0}}
奥利维尔·拉隆德

131
@OlivierLalonde,我不得不使用{{ websites.[0] }}
Matt

4
的确,@ Matt不仅是一种幸运的格式,而且还是一种已记录的语法。(请参阅我的回答。)
Arjan

5
数组中的最后一个元素呢?
winduptoy

319

下面的代码在index之前有一个附加的点,按预期方式工作。在此,当索引后面跟随另一个属性时,方括号是可选的:

{{people.[1].name}}
{{people.1.name}}

但是,在以下情况中需要方括号:

{{#with people.[1]}}
  {{name}}
{{/with}}

在后者中,使用不带方括号的索引号将得到一个:

Error: Parse error on line ...:
...     {{#with people.1}}                
-----------------------^
Expecting 'ID', got 'INTEGER'

顺便说一句:方括号(也)用于段文字语法,以指代否则将无效的实际标识符(而非索引号)。什么是有效标识符中的更多详细信息

(已在YUI中使用车把进行了测试。)

2.xx更新

现在,您可以使用get辅助程序:

(get people index)

尽管如果您遇到有关索引需要为字符串的错误,请执行以下操作:

(get people (concat index ""))

10
这应该是答案,因为它比所选答案更彻底。索引结束时需要方括号使我停留了一段时间!
modulitos 2015年

这成功了!谢谢。。。以上未选择的答案,请将其标记为正确的。
MarioAraya16年

1
{{#with people.1}}解决方案对我有用com.github.jknack:handlebars:4.1.2
Ferran Maylinch


17

如果未公开的功能不是您的游戏,则可以在此处完成相同的操作:

Handlebars.registerHelper('index_of', function(context,ndx) {
  return context[ndx];
});

然后在模板中

{{#index_of this 1}}{{/index_of}}   

我在掌握之前写了以上

this.[0]

如果没有编写自己的帮助程序,我看不到有人对车把做得太过分。



8

如果要先获取/后获取,请尝试此操作。

{{#each list}}

    {{#if @first}}
        <div class="active">
    {{else}}
        <div>
    {{/if}}

{{/each}}


{{#each list}}

    {{#if @last}}
        <div class="last-element">
    {{else}}
        <div>
    {{/if}}

{{/each}}

7

当您使用each和在一个数组中循环时,如果要在当前项的上下文中访问另一个数组,则可以这样做。

这是示例数据。

[
  {
    名称:'foo',
    attr:['boo','zoo']
  },
  {
    名称:“ bar”,
    attr:['far','zar']
  }
]

这是获取attr数组中第一项的把手。

{{#eachplayer}}
  <p> {{this.name}} </ p>

  {{#with this.attr}}
    <p> {{this。[0]}} </ p>
  {{/ with}}

{{/每}}

这将输出

<p> foo </ p>
<p>嘘</ p>

<p>栏</ p>
<p>远</ p>

如果attr数组针对不同对象具有不同数量的元素,那么迭代过程将如何?例如:[{名称:'foo',attr:['boo','zoo']},{名称:'bar',attr:['far','zar','sar]}]那么您将显示数组每个对象的所有attr吗?
Partha Roy

我没有尝试过,但我认为在{{#with this.attr}}中this可以代替this.[0]
Fatih Acet

1

如果未命名数组(仅将数组传递到模板),那么也可以使用以下语法:

  <ul id="luke_should_be_here">
  {{this.1.name}}
  </ul>

0

就我而言,我想像这样访问自定义帮助程序中的数组,

{{#ifCond arr.[@index] "foo" }}

哪个没有用,但是@julesbou建议的答案有用。

工作代码:

{{#ifCond (lookup arr @index) "" }}

希望这可以帮助!干杯。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.