Ember学習(5):計算型属性と使用@each集約データ

1408 ワード

英語の住所:http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/
通常、計算型属性を定義することができますが、その値は1つの配列のすべての要素の値に依存します.例えば、あなたはcontrollerの中のすべてのtodo項目をカウントしたいかもしれません.それらのどれぐらいが完成したかを統計します.以下では、それがどのようなものになるかを説明します.
App.TodosController = Ember.Controller.extend({
  todos: [
    Ember.Object.create({ isDone: false })
  ],

  remaining: function() {
    var todos = this.get('todos');
    return todos.filterBy('isDone', false).get('length');
  }.property('[email protected]')
});
ここで依存するキーワードは[email protected]で、キーワード@eachが含まれています.これは、以下のイベントが発生した時に、自動的にこの計算タイプの属性にバインディングを更新し、観察イベントをトリガすることを示しています.
  • 任意のtodos配列中の要素のisdone属性が変化したとき
  • の新しい要素がtodos配列
  • に追加される.
  • は、todos配列から1つの要素
  • を削除する.
  • controller内のtodos配列自体は、異なる配列
  • を指すように変化される.
    上記の例では、remaningの値は1です.
    App.todosController = App.TodosController.create();
    App.todosController.get('remaining');
    // 1
    todoのisdone属性を変更すると、remaning属性の値が自動的に更新されます.
    var todos = App.todosController.get('todos');
    var todo = todos.objectAt(0);
    todo.set('isDone', true);
    
    App.todosController.get('remaining');
    // 0
    
    todo = Ember.Object.create({ isDone: false });
    todos.pushObject(todo);
    
    App.todosController.get('remaining');
    // 1
    @eachは下の階にのみ有効です[email protected][email protected]など、入れ子の形は使えません.