计算属性和@ee

时间:2015-08-11 21:05:16

标签: javascript ember.js

我一直在阅读文档和API,我很难找到以下解释:

export default Ember.Controller.extend({
  collectionTotal: function() {
    var games = this.get('model');
    return games.length
  }.property('@each')
});

.property('@each')实际发生了什么?我知道我得到了计算属性,我不明白@each是什么。

1 个答案:

答案 0 :(得分:5)

什么是@each

@each会观察数组中每个项目的各个属性。

例如,如果我观察users.@each.name,我会在以下情况下收到一个事件:

  • users属性被替换为例如this.set('users', ...)
  • users
  • 中添加或删除了一个项目
  • 任何项目的name属性更改

您可以使用以下语法观察多个属性:users.@each.{name,email}

你无法嵌套它们。这不起作用:users.@each.friends.@each.mood

在官方文档中阅读更多内容:

回答您的问题

@each本身没有意义。如果您只需要查看要添加或删除的项目,则可以观察[]属性。

通常,您应该观察函数体中使用的相同属性。在您的示例中,modellength

  collectionTotal: function() {
    var games = this.get('model');
    return games.get('length');
  }.property('model.length')

或等效地:

  collectionTotal: function() {
    return this.get('model.length');
  }.property('model.length')

或等效地:

  collectionTotal: Ember.computed.reads('model.length')