Ember.js:对ArrayController进行分组/分区

时间:2014-05-15 17:38:58

标签: javascript ember.js

我有一个ArrayController,我想根据特定键的值对该ArrayController的内容进行分组。

例如,如果我的ArrayController中的对象是:

id   status   name
-----------------------------
1    1        some name
2    1        some other name
3    2        blah
4    3        blah again

然后我想按status分组内容。

为此,我尝试在ArrayController中使用计算属性:

App.SomeArrayController = Ember.ArrayController.extend({
  itemController: 'some-item',      

  status1: Ember.computed.filterBy('content', 'status', 1),
  status2: Ember.computed.filterBy('content', 'status', 2),
  status3: Ember.computed.filterBy('content', 'status', 3)
});

在模板中,正在显示这些,但它们被我在ArrayController中指定的itemController包装

// item controller used in the ArrayController
App.SomeItemController = Ember.ObjectController.extend({
  anotherKey: function () {
    return 'hey ' + this.get('name');
  }.property('name')
});


<!-- template to display status=1 items -->
{{#each status1}}

  // displays the name (as a property from the model)
  {{this.name}}

  // nothing displays here
  // (leading me to believe it is not being wrapped by the item controller)
  {{this.anotherKey}}
{{/each}}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

itemController仅在迭代控制器集合时包装项目。

{{#each item in controller}}
  {{item.coolItemControllerProperty}}
{{/each}}

它不适用于控制器内的任何集合。如果您尝试迭代底层模型/内容,则不会被包装。

{{#each item in content}}
  {{item.coolItemControllerProperty}} // undefined
{{/each}}

{{#each item in model}}
  {{item.coolItemControllerProperty}} // undefined
{{/each}}

幸运的是,您可以在模板中为这些情况指定itemController

{{#each item in status1 itemController='some-item'}}
  {{item.coolItemControllerProperty}}
{{/each}}