ember.js - Ember : What is the non controller way to sort an array of models

标签 ember.js

我想按日期对 Ember 模型数组进行排序,但似乎所有旧文档都与 Controller 内部的排序相关。在这种情况下,当我在路径中获取模型时,我需要对该数组进行排序,以便我可以将其发送到服务以对其执行操作。

我有两个模型:站点和航类。

所以我有一个对象站点,其构造函数是 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

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

最佳答案

最好的选择是使用Ember.compulated.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']
});

用法:

// templates/sites.hbs
{{#each sites as |site|}}
  {{site-widget site=site}}
{{/each}}

在这种情况下,_flightStoring 属性实际上是可观察的并且是可变的。更改其值也会更改排序顺序。

<小时/>

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

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

  sortedFlights: Ember.computed.sort('flights', function(a, b) {
    return a.executeAt > b.executeAt;
  })
});
<小时/>

我想借此机会厚颜无耻地将我的 Ember 插件插入 Ember.compulated.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”。

关于ember.js - Ember : What is the non controller way to sort an array of models,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308936/

相关文章:

ember.js - emberjs 文档就绪函数应该放在哪里?

javascript - Ember.js 'Objects' 和 'ArrayController'

javascript - 用于共享数据的 Ember 应用程序 Controller

javascript - Ember PromiseArray sortBy

ember.js - 加载空的/可选的嵌入式 hasMany 与 Ember 数据的关系

javascript - Ember-Data: "mappings"是如何工作的

attributes - ember,如何在多个链接中获取 "name"属性?

javascript - Ember 直接路由不加载内容

ember.js - 在 Ember.js 中处理事件的最佳方式是什么?

javascript - 在 Ember.js 中声明 mixin 时,将应用程序命名空间作为第一个参数是什么意思?