EmberJS基于ItemController或全局属性对ArrayController进行排序?

时间:2014-05-21 15:33:17

标签: ember.js ember-data

我想在计算属性(relevance)上对相关对象的ArrayController进行排序。相关性是根据您正在查看的主要模型计算的。

麻烦似乎是,虽然您可以使用控制器装饰模型,但在那里添加显示逻辑/属性,您可以对这些属性进行排序。 (见:Ember ArrayController cannot be sorted by property defined in itemController

我创建了一个可以捕获大部分内容的JSBin:http://jsbin.com/guluxaco/1/edit

我知道我可以通过将相关性属性推送到模型来实现这一点,但不要认为这适合模型到达另一个控制器(或全局属性)

我看到两种方法:

1)将relevance向下推到模型(相关对象)。在那种情况下,我应该在哪里存储当前模型(主要对象)?

2)获取ArrayController以某种方式重新排序?也许在路线中对模型进行排序或装饰?

1 个答案:

答案 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更改为此代码并且它正在运行。