2014-05-21 120 views
0

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

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

我创建了一个JSBin,抓住这个最:http://jsbin.com/guluxaco/1/edit

我知道我可以通过推动相关属性下降到模型得到这个工作,但不认为这是适当的要为模型可达另一个控制器(或全局属性)

我看到两种方法:

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

2)获取ArrayController重新排序?也许排序或装饰路线中的模型?

回答

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('[email protected]', 'controllers.mood.mood') 
}); 

希望这会有所帮助,我将您的jsbin更改为此代码并且它正在工作。

+0

现在我再次读你的问题,我认为这个解决方案是你不想做的,把属性放在模型中。 – fanta

相关问题