对于大多数涉及排序的场景,建议使用它Ember.SortableMixin
,它被烘焙到Ember.ArrayController
.
请参考 JSFiddle 中的这个概念示例:http: //jsfiddle.net/schawaska/tbbAe/
在此示例中,模型有一个DateTime
名为 的字段when
,我将其用于过滤:
App.Greeting = DS.Model.extend({
text: DS.attr('string'),
when: DS.attr('date')
});
App.Greeting.FIXTURES = [
{id: 1, text: 'First', when: '3/4/2013 2:44:52 PM'},
{id: 2, text: 'Second', when: '3/4/2013 2:44:52 PM'},
{id: 3, text: 'Third', when: '3/4/2013 2:44:52 PM'},
{id: 4, text: 'Fourth', when: '3/4/2013 3:44:52 PM'}
];
在控制器中我唯一要做的就是设置属性的名称和排序方向:
App.SortingMixinController = Em.ArrayController.extend({
sortProperties: ['when'],
sortAscending: false
});
然后在我的 Handlebars 模板中,我可以{{each}}
像往常一样使用助手。
因为在这个示例中,除了Forth (因为排序首先出现)之外,所有日期都是相同的,而且因为SortableMixin
,这些值将通过另一个属性进行排序 - 我在这里假设 Id。
我在那个小提琴中采用的另一种方法是使用计算属性。我不太确定这种方法,因为它似乎消耗更多资源并且其中的代码App.SortingPropertyController
值得一笑,但有点显示可能性。