如何在句柄中通过索引访问访问数组项?

我试图在一个句柄模板中的数组中指定一个项目的索引:

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

用这个:

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

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

221722 次浏览

试试这个:

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

下面的在索引前加一个点就像预期的那样工作。在这里,当索引后跟另一个属性时,方括号是可选的:

\{\{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语法,以引用实际的标识符(而不是索引号),否则这些标识符是无效的。更多细节在什么是有效的标识符?

(用YUI中的手柄测试)

2.xx更新

你现在可以使用get帮助器来实现:

(get people index)

尽管如果你得到一个关于索引需要是字符串的错误,请执行:

(get people (concat index ""))

如果未记录的功能并不是你的游戏,你也可以采用同样的方法:

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

然后在模板中

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

在我得到之前,我写了上面的内容

this.[0]

如果不自己写帮手,我不认为有人会用把手走得太远。

如果你想第一个/最后一个取,请试试这个。

\{\{#each list}}


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


\{\{/each}}




\{\{#each list}}


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


\{\{/each}}

如果数组没有被命名(只有数组被传递给模板),也可以使用下面的语法:

  <ul id="luke_should_be_here">
\{\{this.1.name}}
</ul>
\{\{#each array}}
\{\{@index}}
\{\{/each}}

当你使用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>

如果你想使用动态变量

这行不通:

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

你需要做的是:

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

参见句柄查找助手车把子表达式

在我的例子中,我想访问一个自定义helper中的数组,

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

这并没有起作用,但是@julesbou建议的答案起作用了。

工作代码:

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

希望这能有所帮助!欢呼。