Ember.js集合迭代中的位置索引
在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
{{#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”)
如果您想修改编号,请获取索引。在RC6CollectionView
中,为每个呈现的集合视图提供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}}