zoukankan      html  css  js  c++  java
  • 2.4 The Object Model -- Computed Properties and Aggregate Data with @each(计算的属性和使用@each聚合数据)

    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

  • 相关阅读:
    火狐浏览器清理缓存快捷键
    SVN使用教程总结
    如何登陆服务器
    get、put、post、delete含义与区别
    zookeeper 半数可用/选举机制
    zookeeper 分布式安装/配置/启动
    lucene 统计单词次数(词频tf)并进行排序
    selenium 爬取空间说说
    MapReduce自定义InputFormat,RecordReader
    reduce 阶段遍历对象添加到ArrayList中的问题
  • 原文地址:https://www.cnblogs.com/sunshineground/p/5147344.html
Copyright © 2011-2022 走看看