Ember学習(5):計算型属性と使用@each集約データ
1408 ワード
英語の住所:http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/
通常、計算型属性を定義することができますが、その値は1つの配列のすべての要素の値に依存します.例えば、あなたはcontrollerの中のすべてのtodo項目をカウントしたいかもしれません.それらのどれぐらいが完成したかを統計します.以下では、それがどのようなものになるかを説明します.任意のtodos配列中の要素のisdone属性が変化したとき の新しい要素がtodos配列 に追加される.は、todos配列から1つの要素 を削除する. controller内のtodos配列自体は、異なる配列 を指すように変化される.
上記の例では、remaningの値は1です.
通常、計算型属性を定義することができますが、その値は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が含まれています.これは、以下のイベントが発生した時に、自動的にこの計算タイプの属性にバインディングを更新し、観察イベントをトリガすることを示しています.上記の例では、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]など、入れ子の形は使えません.