我想按日期按降序排列我得到的记录。
//model definition
export default DS.Model.extend({
name: DS.attr('string'),
date: DS.attr('number')
}
我试过return this.store.findAll('mymodel').sortBy('date')
但没有成功。我使用的是2.3.0版本。
//the data
"mymodel" : {
"-KBJDc1Ccg2kny1Vzn5B" : {
"date" : 1456350696971,
"name" : "Jhon"
},
"-KBJH_JN6G-AiAVsRfCS" : {
"date" : 1456349784907,
"name" : "Peter"
},
"-KBK6ZaiI-6o6KPocrSJ" : {
"date" : 1456348227848,
"name" : "Paul"
}
}
答案 0 :(得分:5)
返回this.store.findAll('mymodel').sortBy('date')
无效,因为findAll
会返回PromiseArray!
如果你在model
钩子中这样做,你应该这样做:
return this.store.findAll('mymodel').then(results => results.sortBy('date'));
如果你在计算属性中执行它,你可能想在PromiseArray中重新封装它:
list: Ember.computed({
get() {
let promise = this.store.findAll('mymodel').then(results => results.sortBy('date'));
return DS.PromiseArray.create({promise});
}
}
答案 1 :(得分:1)
正如@Lux所说,你不能在你的路线中对你的模型进行排序,因为这是一个承诺,但你可以在你的控制器中对它进行排序,添加一个计算属性。
您的route
将如下所示:
model:function(){
return this.store.findAll('mymodel');
}
您的controller
将如下所示:
sortingKey:['date'],
sortedModel:Ember.computed.sort('model', 'sortingKey')
为什么在路由器中进行排序?
因为在控制器中设置模型时,承诺已经解决。
请参阅:
https://stackoverflow.com/a/35624736/3998465 http://emberjs.com/api/classes/Ember.computed.html#method_sort
答案 2 :(得分:1)
我刚刚遇到这个问题真的很难,我只是想对findAll()的结果进行排序,永远不会期望这么大的问题。
幸运的朋友建议我使用https://www.npmjs.com/package/ember-composable-helpers排序帮助器,所以在每个hbs中我只需要切换原始的taskItems (按“name:asc”taskItems排序),魔术就完成了。