如何仅使用Ember中的路线对模型进行排序?

时间:2015-07-09 13:00:57

标签: ember.js

过去你可以使用ArrayControllers(在1.13.0中弃用),我们知道很快就会在ember中推荐控制器。目前是否可以仅使用我的路线对模型进行排序?

/routes/orders.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() { return this.store.findAll('order'); }
});

我如何根据姓名排序'例如,但只使用路线?

请注意,这个问题类似于How to sort model in Ember.js? - 但它是通过任何方法进行的,而我的问题仅限于使用路线(如果可能的话)。

2 个答案:

答案 0 :(得分:11)

这似乎可以完成工作,除非我错过了什么。

export default Ember.Route.extend({
  model: function() { 
    return this.store.findAll('order') .
      then(orders => orders.sortBy('name'));
  }
});

答案 1 :(得分:3)

Ember 2.0的新答案

尽管这个问题仍然存在,并且torazaburo的回答在Ember 2.0之前很有效。现在最好的答案是“不要仅使用路线对模型进行排序” - 而是在控制器中进行排序,或者如果您不想在组件中使用控制器。

Ember 2.0之后的重装行为有一个很大的问题。如果商店中已有记录,并且您未在findAll选项中指定{reload:true},则findAll方法将立即解析这些记录,这意味着当时只对您已有的记录进行排序。因此,当实际的后台请求仍在进行时,您的模型可以返回有限数量的记录。有关详细信息,请参阅DS Store文档。

基于之前接受的答案的改进代码是:

export default Ember.Route.extend({
  model: function() { 
    return this.store.findAll('order', { reload: true }).
      then(orders => orders.sortBy('name'));
    }
});

但如前所述,我认为最好的做法是不仅仅依赖路线,而是在控制器或组件中使用计算排序。