Ember.js集合迭代中的位置索引

Ember.js集合迭代中的位置索引,ember.js,handlebars.js,Ember.js,Handlebars.js,在ember.js中,有没有一种方法可以在迭代过程中获取位置索引 {{#each itemsArray}} {{name}} {{/each}} 我正在寻找一种方法来实现以下目标: {{#each itemsArray}} {{name}} - {{index}}th place. {{/each}} 更新: 根据@ebryn的评论,以下代码不使用每个项目的嵌套视图: <script type="text/x-handlebars"> {{#co

在ember.js中,有没有一种方法可以在迭代过程中获取位置索引

{{#each itemsArray}}
     {{name}}
{{/each}}
我正在寻找一种方法来实现以下目标:

{{#each itemsArray}}
    {{name}} - {{index}}th place.
{{/each}}
更新:

根据@ebryn的评论,以下代码不使用每个项目的嵌套视图:

<script type="text/x-handlebars">    
    {{#collection contentBinding="App.peopleController"}}
        Index {{contentIndex}}: {{content.name}} <br />
    {{/collection}}
</script>​

{{{#collection contentBinding=“App.peopleController”}
索引{{contentIndex}}:{{content.name}}
{{/collection} ​


尽管要具有类似adjustedIndex的功能,仍需要嵌套视图。

这不是当前车把或
Ember.Handlebar的功能。
。我们在
#collection
/
Ember.CollectionView
中提供了
contentIndex
。我认为在
#中支持每个
也很有用。请在GitHub存储库中提交一个问题:

我想您也可以这样做

//add index property to all each queries
Handlebars.registerHelper('each', function(context, block) {
    var ret = "";
    for(var i=0, j=context.length; i<j; i++) {
        context[i].index = i;
        ret = ret + block(context[i]);
    }
    return ret;
});
//为所有查询添加索引属性
把手.注册表帮助器('each',函数(上下文,块){
var ret=“”;

对于(var i=0,j=context.length;i实际上是的,您可以使用{{each}}助手获取当前索引的位置。您必须为列表中的每个项目创建一个视图,然后使用
{{{parentView.contentIndex}

<script type="text/x-handlebars">
{{#each App.peopleController}}
  {{#view App.PersonView contentBinding="this"}}
    Index {{_parentView.contentIndex}}: {{content.name}} {{adjustedIndex}} <br />
  {{/view}}
{{/each}}
</script>

有关工作示例,请参阅。

我使用collection修改了一个bit ud3323解决方案。 请点击此处:


{{{#collection contentBinding=“App.peopleController”}
{{{#view App.PersonView contentBinding=“this”}
索引{{u parentView.contentIndex}:{{content.name}{{adjustedIndex}}
{{/view} {{/collection} App=Ember.Application.create(); App.peopleController=Ember.ArrayController.create({ 内容:[{name:'Roy'},{name:'Mike'},{name:'Lucy'}] }); App.PersonView=Ember.View.extend({ 内容:空, //只是为了显示你也可以在这里获得当前索引。。。 adjustedIndex:函数(){ 返回此.getPath(“\u parentView.contentIndex”)+1; }.property() });

​​

从9.8版到1.0版之前,您可以用视图包装“contentIndex”,以获取虚拟父对象(即{{each})。如果不添加视图,则您的上下文将成为主模板、列表中的一个项目或您手动使用
{{{each}
设置的任何内容。获取
{each}并非不可能
从JS的角度来看,但是浏览这些子视图要痛苦得多

{{#each App.peopleController}}
    {{#view}}
        Index {{view._parentView.contentIndex}}: {{name}} <br />
    {{/view}}
{{/each}}

...OR...

{{#each people in App.peopleController}}
    {{#view}}
        Index {{view._parentView.contentIndex}}: {{people.name}} <br />
    {{/view}}
{{/each}}
{{{#每个App.peopleController}
{{{#查看}
索引{view.\u parentView.contentIndex}:{{name}}
{{/view} {{/每个}} 或 {{{#App.peopleController中的每个人} {{{#查看} 索引{view.\u parentView.contentIndex}:{{{people.name}}
{{/view} {{/每个}}
以防你喜欢小提琴手


注意:您可以创建一个视图并执行
this.get(“\u parentView.contentIndex”)
如果您想修改编号,请获取索引。

在RC6
CollectionView
中,为每个呈现的集合视图提供
contentIndex
属性。
每个
帮助程序在其实现中使用
CollectionView
,以便uou可以通过以下方式访问索引:

{{#each itemsArray}}
    {{_view.contentIndex}}
{{/each}}

这是一个老问题,但仍然有很多点击率。在当前版本的Ember.JS中,可以使用
\u view.contentIndex
在循环中显示当前索引

{{#each}}
    Index: {{_view.contentIndex}}
{{/each}}
如果您需要一个调整后的索引(例如从1开始),那么就有可能创建可重用的帮助程序
increment

Ember.Handlebars.registerBoundHelper('increment', function(integer) {
    return integer + 1;
});
然后你会用下面的方式使用它

{{#each}}
    Index: {{increment _view.contentIndex}}
{{/each}}
更新

从ember 1.11开始,您也可以这样做

{{#each people as |person index|}}
   Index: {{increment index}}
{{/each}}

从Ember 1.11.0开始,
索引是
每个
块中的可选参数:

{{#each items as |item index|}}
  {{item.name}} is at index {{index}}
{{/each}}

我已经这样做了,但是我觉得覆盖内置迭代器的行为是不对的。您能告诉我为什么在扩展视图时需要传入Ember.变态行为吗?您不需要,但是添加
Ember.变态
mixin会使整个设置执行起来更像一个普通的
每个
助手(此处的通话速度和内存资源)而不是臃肿的
集合
助手。如果您查看这两个集合的源代码并进行比较,您就会明白我的意思。对于大量数据,这会产生不同。您的代码似乎不适用于0.9.8.1,并且VIEW_PRESERVES_CONTEXT设置为trueI get:预期的哈希或Mixin实例,get[object Undefined]如果人们在试图找到一个有效的答案时无意中发现了这个答案,您可以更新这个答案,这将是非常好/非常有帮助的!)更新:Handelbars已经获得。它在Ember.Handlebars中还不可用,但我想它迟早会有用。当我在每个控制器中使用它时,我会得到奇怪的数字。这对我来说很有用-我在控制器中有一个数组,我只是做如下操作:{{{每个前景}索引{{{u view.contentIndex}:{{name}
{{/each}}在不指定itemViewClass的情况下,我们可以使用{u view.contentIndex}。但这在#each中的#if helper中不起作用。为此,我们需要使用:{{#each model itemViewClass=“Ember.View”}{{{if someCondition}{{View.contentIndex}}{{/if}}{{/each}}“指定一个itemViewClass”Ember 1.11的可能副本使得这个问题变得微不足道。如果您是在Ember 1.11+上,请参阅下面的答案。这正是我所寻找的,感谢您的帮助steve!
{{#each people as |person index|}}
   Index: {{increment index}}
{{/each}}
{{#each items as |item index|}}
  {{item.name}} is at index {{index}}
{{/each}}