计算属性和@each

Gre*_*egg 3 javascript ember.js

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

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

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

dwi*_*ern 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')
Run Code Online (Sandbox Code Playgroud)

或等效地:

  collectionTotal: function() {
    return this.get('model.length');
  }.property('model.length')
Run Code Online (Sandbox Code Playgroud)

或等效地:

  collectionTotal: Ember.computed.reads('model.length')
Run Code Online (Sandbox Code Playgroud)