Javascript 如何对Ember.js中的多个项目进行排序
我有这样的结构:Javascript 如何对Ember.js中的多个项目进行排序,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有这样的结构: 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.
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}}
我想做的是按日期对董事会项目进行排序,但我找不到一种方法来做。。。
有什么想法吗
谢谢 您应该在视图后面的控制器中创建一个计算属性 控制器 模板 您可以使用
{{render}}
帮助程序包装{{{each}}…{{/each}
循环,并在控制器中进行排序:
控制器:
模板:
使用computed属性进行排序将导致每次
boardItems
更改时完全重新计算已排序的数组。这里描述的排列内容方法并非如此。谢谢,它奏效了!您能解释一下这部分吗:.property('boardItems.@each.date')是的,每次在boardItems
中添加一个新项目,或者如果date
字段发生变化(使用适当的设置器)时添加一个新项目在任何boardItems
上,它都将重新计算属性。假设您希望boardItems
在应用程序中每次使用board
时都以这种方式进行排序…在模型中定义sortedBoardItems
是否是一种罪恶?arrayController正在贬值
App.BoardShowController = Em.ObjectController.extend({
sortedBoardItems: function(){
return this.get('boardItems').sortBy('date');
}.property('boardItems.@each.date')
});
{{#each sortedBoardItems}}
App.BoardItemsController = Ember.ArrayController.extend({
sortProperties: ['date'],
sortAscending: false // newest first
});
{{#render "boardItems" boardItems}}
{{#each arrangedContent}}
Title: {{title}}
...
{{/each}}
{{/render}}