1

我有一个要显示的对象网格。网格的每一行显示 4 个对象。根据对象在网格中的位置,我希望某些类位于对象的元素上。例如,网格中的最后一个对象应该具有类“last_in_grid”。此计算取决于数组中对象的索引。

我的模板看起来像:

{{#each row in objects}}
    {{#each object in row}}
        {{view MyApp.MyView objectBinding="object"}}
    {{/each}}
{{/each}}

MyApp.MyView需要知道each助手的迭代索引。

理想情况下,我想要类似的东西:

{{#each row in objects}}
    {{#each object in row}}
        {{view MyApp.MyView objectBinding="object" indexBinding="index_of_each_loop"}}
    {{/each}}
{{/each}}

Django 的模板语言可以做到这一点:

{% for item in items %}
    {% if forloop.counter0 == 0 %}
        blah blah blah
    {% endif %}
{% endfor %}

https://docs.djangoproject.com/en/1.4/ref/templates/builtins/#for

这可以使用 Ember 和 Handlebars 吗?

我是否必须编写自定义版本each才能做到这一点?

4

2 回答 2

2

如果您使用 CollectionView,则该集合的项目/视图可以查询它并查看它们是否是最后一个项目。

小提琴:http: //jsfiddle.net/qKXJt/138/

ArrayController 只是其内容的代理,即 Ember 数组。这意味着您可以获得 Enumerable、Array、MutableArray 等附带的所有好处。

于 2012-09-22T01:34:10.950 回答
2

而不是{{each}}助手,您可以使用{{collection}}助手来获取当前的迭代索引,如这个小提琴:

http://jsfiddle.net/secretlm/67GQb/73/

HTML:

{{#collection contentBinding="App.peopleController"}}    
    {{#view App.PersonView personBinding="content" indexParentBinding="contentIndex" }}
        <td>{{indexParent}}</td> 
        <td>{{person.fullName}}</td>            
    {{/view}}
{{/collection}}

Javascript:

App = Ember.Application.create();

App.Person = Ember.Object.extend({
    fullName: function() {
        return this.get('firstName') + ' ' + this.get('lastName');
    }.property('firstName', 'lastName') 
});

App.peopleController = Ember.ArrayController.create({
    content: [App.Person.create({ firstName: "Yehuda", lastName: "Katz" }),
    App.Person.create({ firstName: "Tom", lastName: "Dale" })]
});

App.PersonView = Ember.View.extend({
    tagName: 'tr',
    indexParent: null    
});​
于 2012-09-22T02:27:59.077 回答