将 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')
});
虽然 Ember.computed.sort
可能是最简单的方法,如果您只想对这些船只进行排序(请参阅 Kori John Roys 的回答),但这并不能解决您的代码中出现的问题。
简而言之:您正在尝试对承诺进行排序,而不是对数据进行排序。要对数据进行排序,您必须执行以下操作:
...
return model.then(function(data){return data.sortBy('name');})
...
现在,一旦承诺得到解决,就会对实际数据进行排序。
以下控制器不会产生任何结果 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')
});
虽然 Ember.computed.sort
可能是最简单的方法,如果您只想对这些船只进行排序(请参阅 Kori John Roys 的回答),但这并不能解决您的代码中出现的问题。
简而言之:您正在尝试对承诺进行排序,而不是对数据进行排序。要对数据进行排序,您必须执行以下操作:
...
return model.then(function(data){return data.sortBy('name');})
...
现在,一旦承诺得到解决,就会对实际数据进行排序。