Ember.computed.sort doesn't seem to work

十年热恋 提交于 2019-12-25 05:30:37

问题


I have a template like so:

{{#each rate in package.ratesSorted}}
  {{rate.year}}
{{/each}}

I want the rates to be sorted by ascending year, so I have:

 var Package = DS.Model.extend({
  rates: DS.hasMany('rate'),
  ratesSorted: Ember.computed.sort('rates', (a, b) => {
    return a.get('year') > b.get('year');
  })
});

Package.reopenClass({
  FIXTURES: [
    {id: 1, rates: [1, 3, 4]}
  ]
});

And my rate Model looks like this:

var Rate = DS.Model.extend({
  year: DS.attr('number'),
});

Rate.reopenClass({
  FIXTURES: [
    {id: 4, year: 4},
    {id: 1, year: 1},
    {id: 3, year: 3}
  ]
});

But it then ends up being sorted 3,4,1. Why?


回答1:


It's because Ember.computed.sorted expects -1 and 1 rather than true or false.

var Package = DS.Model.extend({
  ratesSorted: Ember.computed.sort('rates', (a, b) => a.get('year') < b.get('year') ? -1 : 1)
});

Works. Using sorting definitions, a better version is:

var Package = DS.Model.extend({
  rateSorting: ['year'],
  ratesSorted: Ember.computed.sort('rates', 'rateSorting')
});


来源:https://stackoverflow.com/questions/31280354/ember-computed-sort-doesnt-seem-to-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!