将 sortBy('name') 放在控制器的什么位置?

Where to put sortBy('name') in the controller?

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

model = model.sortBy('name');

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

我该如何解决这个问题?

app/controllers/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')
});

我可能倾向于在这里使用计算属性,特别是 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

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

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

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

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