我想在计算属性(relevance
)上对相关对象的ArrayController进行排序。相关性是根据您正在查看的主要模型计算的。
麻烦似乎是,虽然您可以使用控制器装饰模型,但在那里添加显示逻辑/属性,您可以对这些属性进行排序。 (见:Ember ArrayController cannot be sorted by property defined in itemController)
我创建了一个可以捕获大部分内容的JSBin:http://jsbin.com/guluxaco/1/edit
我知道我可以通过将相关性属性推送到模型来实现这一点,但不要认为这适合模型到达另一个控制器(或全局属性)
我看到两种方法:
1)将relevance
向下推到模型(相关对象)。在那种情况下,我应该在哪里存储当前模型(主要对象)?
2)获取ArrayController以某种方式重新排序?也许在路线中对模型进行排序或装饰?
答案 0 :(得分:0)
我看了一下你的代码,我想出了一个解决方案,所以,我做的就是改变你的模型:
model: function() {
return [Ember.Object.create({color: 'red'}),
Ember.Object.create({color: 'yellow'}),
Ember.Object.create({color: 'blue'})];
}
然后,你的色彩控制器:
App.ColorsController = Ember.ArrayController.extend({
needs: ['mood'],
sortProperties: ['relevance'],
contentChanged: function() {
Ember.run.once(this, function() {
this.get('content').forEach(function(color) {
color.set('relevance', color.get('color') === this.get('controllers.mood.mood') ? 1 : 0);
}, this);
});
}.observes('content.@each', 'controllers.mood.mood')
});
希望这有帮助,我将你的jsbin更改为此代码并且它正在运行。