2015-04-03 54 views
1

以下控制器不会导致任何ships。如果我删除把sortBy('name')放在控制器的哪里?

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

回答

1

虽然Ember.computed.sort可能是最简单的方法如果您只想将这些船舶分类(请参阅Kori John Roys的答案),但这并不能解决代码中出现问题的情况。

简而言之:您试图对承诺进行排序,而不是数据。对数据进行排序,你就必须做到以下几点:

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

现在,排序上的实际数据做一次承诺已得到解决。

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