Ember:对模型数组进行排序的非控制器方式是什么

And*_*rew 2 ember.js

我希望按日期对Ember模型数组进行排序,但似乎所有旧文档都与控制器内的排序有关.在这种情况下,我需要在路由中获取模型时对此数组进行排序,以便将其发送到服务以对其执行操作.

我有两个模型,站点和飞行.

所以我有一个构造函数是的对象站点 myApp@model:site

我希望得到一个与该站点相关的飞行对象数组,其中有许多按日期排序的配置.

我的尝试是:

var flights = site.get('flights').sortBy('executeAt:desc');

我注意到的一个奇怪的事情是没有":desc"它默认为提升

var flights = site.get('flights').sortBy('executeAt'); - >上升

但结肠后面的值不会影响任何东西

var flights = site.get('flights').sortBy('executeAt:'); - >降序或``var flights = site.get('flights').sortBy('executeAt:asc');` - >降序

在某些情况下,它完全混淆了这种类型并给了我未分类的数据.

供参考,日期格式为: 2015-09-03T13:34:33.000Z

那么获得这些数据的排序列表的最佳方法是什么?

Wes*_*man 6

你最好的选择是使用Ember.computed.sort.以下是API文档:http://emberjs.com/api/classes/Ember.computed.html#method_sort

例:

// components/site-widget.js
export default Ember.Component.extend({
  // The site model
  site: null,

  // List of flights
  flights: Ember.computed.alias('site.flights'),

  // Flights sorted in order
  sortedFlights: Ember.computed.sort('flights', '_flightSorting')
  _flightSorting: ['executeAt:desc']
});
Run Code Online (Sandbox Code Playgroud)

用法:

// templates/sites.hbs
{{#each sites as |site|}}
  {{site-widget site=site}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,_flightStoring财产实际上是观察和可变的.更改它的值也会改变排序顺序.


如果您想进行自己的自定义排序,可以将其用作a/b函数.例如:

export default Ember.Component.extend({
  /* ... */

  sortedFlights: Ember.computed.sort('flights', function(a, b) {
    return a.executeAt > b.executeAt;
  })
});
Run Code Online (Sandbox Code Playgroud)

我想借此机会无耻地插上我的Ember插件Ember.computed.sortBy.如果您不需要可变排序,我建议您检查一下.https://github.com/workmanw/ember-computed-sortby

我也有一个开放的RFC,希望这将被采用到Ember核心.https://github.com/emberjs/rfcs/pull/87


更新:我创建了一个Ember Twiddle来帮助演示整个事情:http://ember-twiddle.com/60efa60e191fa9026774

构建应用程序时,我可能会稍微离开.但是与您的问题相关的文件是"components/flight-list.js"和"templates/components/site.hbs".