我有这个结构:
App.Router.map(function() {
this.resource('board', {path: '/board'}, function() {
this.route('new', {path: '/new'});
this.route('show', {path: '/show/:board_id'});
});
});
App.Board = DS.Model.extend({
title: DS.attr('string'),
initialAmount: DS.attr('number'),
initialDate: DS.attr('date'),
boardItems: DS.hasMany('BoardItem'),
_csrf: DS.attr()
});
App.BoardItem = DS.Model.extend({
title: DS.attr('string'),
income: DS.attr('number'),
outcome: DS.attr('number'),
date: DS.attr('date'),
itemType: DS.attr('string'),
board: DS.belongsTo('Board')
});
App.BoardShowRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('board', params.board_id).sort();
}
});
并且在视图中,我列出了这样的电路板项目:
{{#each boardItems}}
我想要做的是按日期对boardItems进行排序,我无法找到一种方法...... 任何想法?
谢谢!
答案 0 :(得分:8)
您应该在视图后面的控制器中创建一个计算属性
App.BoardShowController = Em.ObjectController.extend({
sortedBoardItems: function(){
return this.get('boardItems').sortBy('date');
}.property('boardItems.@each.date')
});
{{#each sortedBoardItems}}
答案 1 :(得分:4)
您可以使用{{#each}}...{{/each}}
帮助程序包装{{render}}
循环并在控制器中进行排序:
App.BoardItemsController = Ember.ArrayController.extend({
sortProperties: ['date'],
sortAscending: false // newest first
});
{{#render "boardItems" boardItems}}
{{#each arrangedContent}}
Title: {{title}}
...
{{/each}}
{{/render}}
每次boardItems
更改时,使用computed属性进行排序将导致完全重新计算已排序的数组。对于此处描述的arrangedContent
方法,情况并非如此。