2.4 The Object Model -- Computed Properties and Aggregate Data with @each(计算的属性和使用@each聚合数据)...

本文介绍如何在Ember.js中计算控制器中所有待办事项的完成数量,并解释了计算属性更新的触发条件。通过实例展示了如何使用计算属性来动态获取数组中满足特定条件的元素数量。

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
     });
});    
  • 注意这里依赖的key(todos.@each.isDone)包含特殊的key @each
  • 当以下四个事件发生时,这指示ember.js更新此计算属性的绑定和触发观察者
    • todos数组中的任何对象的isDone属性发生改变。
    • todos数组中添加一项。
    • todos中删除一项。
    • controllertodos属性被改变为另外一个数组。
  • 在上面的例子中,reamaining的count值是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

转载于:https://www.cnblogs.com/sunshineground/p/5147344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值