gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:46:18 24 4
gpt4 key购买 nike

我想按日期对 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com