2013-06-05 87 views
0

我有一个控制器,它使用content作为基础,然后有另一个变量称为items这是内容的过滤版本。更新content时应更新items。我试图在我的控制器中做这样的事情:镜像控制器内容

updateItems: function() { 
    var items = this.get('content').filter(this.get('toggleFilter')); 
    this.set('items', items); 
}.observes('toggleFilter', 'content'), 

这很好,除了第一次加载。首次浏览页面时,项目为空。我收集这是因为在setupController中它被设置为content,它仍在等待信息。

我注意到,将观察值设置为content.length使其工作。然而,这并不理想,部分原因是因为在装入数据时将为每个插入调用updateItems方法,并且还因为内容可能会更改,但长度可能保持不变。有一个更好的方法吗?

回答

2

@each是你在找什么

updateItems: function() { 
    var items = this.get('content').filter(this.get('toggleFilter')); 
    this.set('items', items); 
}.observes('toggleFilter', '[email protected]'), 

此外,您还可以使用计算财产

items: function(){ 
    return this.get('content').filter(this.get('toggleFilter')); 
}.property('[email protected]', 'toggleFilter') 

isLoaded

items: function(){ 
    return this.get('content').filter(this.get('toggleFilter')); 
}.property('content.isLoaded', 'toggleFilter') 
+0

初始加载,从项目如下模型被逐一插入。因此,对于1000个项目组,该功能将被称为1000次。所有内容信息加载完毕后,是否没有办法调用updateItems? – Gevious

+0

Ember runloop足够聪明,可以在一次插入1000个物品的情况下解决这个问题,它不会为每一次添加都执行,它会在第1000个元素后执行,但如果这些物品是在不同时间点添加的,当时会得到执行,您可以通过添加console.log或alert来检查此行为 –

+0

我尝试使用您的属性建议和它的更优雅。它也解决了这个问题。谢谢 – Gevious