过去你可以使用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? - 但它是通过任何方法进行的,而我的问题仅限于使用路线(如果可能的话)。
答案 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'));
}
});
但如前所述,我认为最好的做法是不仅仅依赖路线,而是在控制器或组件中使用计算排序。