镜像控制器内容

时间:2013-06-05 10:04:47

标签: ember.js

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

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

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

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

1 个答案:

答案 0 :(得分:2)

@each正是您要找的

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

此外,您可以使用计算属性,如下所示

items: function(){
  return this.get('content').filter(this.get('toggleFilter'));
}.property('content.@each', 'toggleFilter')

isLoaded之后

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