1. 通常,你可能有一个计算的属性依赖于数组中的所有元素来确定它的值。例如,你可能想要计算controller中所有todo items的数量,以此来确定多少任务给完成了。
export default Ember.Controller.extend({ todos: [ Ember.Object.create({ isDone: true }), Ember.Object.create({ idDone: false }), Ember.Object.create({ isDone: true }) ], remaining: Ember.computed(‘todos.@each.isDone‘, function () { var todos = this.get(‘todos‘); return todos.filterBy(‘isDone‘, false).get(‘length‘);//1 }); });
import TodosController from ‘app/controllers/todos‘; todosController = TodosController.create(); todosController.get(‘remainging‘);
2. 如果我改变todo‘s isDone属性, remaining属性将会被自动更新:
var todos = todosController.get(‘todos‘); var todo = todos.objectAt(1); todo.set(‘isDone‘, true); todosController.get(‘remaining‘); //0 todo = Ember.Object.Create({ isDone: false }); todos.pushObject(todo); todosController.get(‘remaining‘);//1
3. 请注意@each不能嵌套。
正确:todos@each.owner.name
错误:todos@each.owner.@each.name
2.4 The Object Model -- Computed Properties and Aggregate Data with @each(计算的属性和使用@each聚合数据)
原文:http://www.cnblogs.com/sunshineground/p/5147344.html