Emberjs排序记录

时间:2016-02-24 22:17:05

标签: ember.js ember-data

我想按日期按降序排列我得到的记录。

//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"
  }
}

3 个答案:

答案 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排序),魔术就完成了。