问题
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