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

时间:2011-11-07 23:37:52

标签: javascript handlebars.js

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

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

使用:

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

如果上述情况不可能,我如何编写一个可以访问数组中特定项目的助手?

9 个答案:

答案 0 :(得分:381)

试试这个:

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

答案 1 :(得分:297)

以下在索引之前有一个额外的点,正如预期的那样工作。这里,当索引后跟另一个属性时,方括号是可选的:

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

但是,方括号

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

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

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

作为旁白:括号(也)用于segment-literal syntax,用于引用否则无效的实际标识符(不是索引号)。 What is a valid identifier?

中的更多详细信息

(在YUI中使用把手测试。)

2.xx更新

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

(get people index)

虽然如果您收到有关索引需要为字符串的错误,请执行:

(get people (concat index ""))

答案 2 :(得分:17)

{{#each array}}
  {{@index}}
{{/each}}

答案 3 :(得分:15)

如果您的游戏没有未记录的功能,可以在此处完成相同的操作:

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

然后在模板中

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

在我抓住

之前,我写了上述内容
this.[0]

在没有自己的帮助者的情况下,我无法看到一个人走得太远。

答案 4 :(得分:8)

如果您想使用动态变量

这不起作用:

{{#each obj[key]}}
...
{{/each}}

你需要这样做:

{{#each (lookup obj key)}}
...
{{/each}}

请参阅handlebars lookup helperhandlebars subexpressions

答案 5 :(得分:7)

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

以下是示例数据。


[
  {
    name: 'foo',
    attr: [ 'boo', 'zoo' ]
  },
  {
    name: 'bar',
    attr: [ 'far', 'zar' ]
  }
]

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

{{#each player}}
  <p> {{this.name}} </p>

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

{{/each}}

这将输出

<p> foo </p>
<p> boo </p>

<p> bar </p>
<p> far </p>

答案 6 :(得分:6)

如果您想先获取/最后一次,请尝试此操作。

{{#each list}}

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

{{/each}}


{{#each list}}

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

{{/each}}

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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

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

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

工作代码:

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

希望这会有所帮助!干杯。