在控制器中放置sortBy('name')的位置?

时间:2015-04-03 08:35:06

标签: javascript ember.js ember-data

以下控制器不会产生任何ships。如果我删除

model = model.sortBy('name');

它导致所有ships,但显然它们没有按name属性排序。

我该如何解决这个问题?

应用/控制器/ index.js

import Ember from 'ember';

export default Ember.Controller.extend({
  selectedCompany: null,

  companies: function(){
    var model = this.get('model.companies');
    return model;
  }.property('model.companies'),

  ships: function(){
    var model = this.get('model.ships');
    model = model.sortBy('name');
    return model;
  }.property('model.ships')
});

2 个答案:

答案 0 :(得分:3)

我可能倾向于在这里使用计算属性,特别是sort

import Ember from 'ember';

export default Ember.Controller.extend({
  selectedCompany: null,
  companies: Ember.computed.alias('model.companies'),
  shipSort: ['name:asc'],

  sortedShips: Ember.computed.sort('model.ships', 'shipSort')
});

奖金:working js-bin

答案 1 :(得分:1)

虽然Ember.computed.sort可能是最简单的方法,如果您只想对这些船只进行排序(请参阅Kori John Roys的回答),但这并未解决您的代码中出现的问题。

简而言之:您正试图对承诺进行排序,而不是数据。要对数据进行排序,您必须执行以下操作:

...
return model.then(function(data){return data.sortBy('name');})
...

现在,一旦解决了承诺,就会对实际数据进行排序。