あなたの質問には3つの部分があると思います:
- コレクションを観察する方法
- オブザーバー全般
- 関係の管理
コレクションを観察する
@each プロパティは、コレクション内のアイテムのプロパティを観察するのに役立ちます。segments.@each.isSelected
オブザーバー全般
.observes()
関数の on は、オブザーバー関数を設定する省略形です。この関数の目的がコレクションを更新することである場合は.property()
、オブザーバーを設定し、関数をプロパティのように扱うを使用すると、より適切に機能する可能性があります。
selectedSegments: function() {
return this.get('segments').filterProperty('isSelected', true);
}.property('segments.@each.isSelected')
これselectedSegments
は、このオブジェクトから選択されたセグメントのサブセットであることを意味し、項目がドロップまたは選択済みとしてマークされると自動的に管理されます。
関係の管理
プレーンな Ember オブジェクトの場合、関係を管理したり、新しいアイテムを配列にプッシュしたりする必要があります。
segments = Em.A(), //somehow you are managing this collection, pushing segments into it
また、Ember オブジェクトと Ember モデルの違いにも注意してください。Ember Data は、モデルと関係を指定し、モデルを管理するのに役立つオプションの追加ライブラリです。Ember データを使用すると、次のようなものになる可能性があります。
App.Source = DS.Model.extend({
//ember-data helps manage this relationship
// the 'segment' parameter refers to App.Segment
segments: DS.hasMany('segments'),
selectedSegments: function() {
return this.get('segments').filterProperty('isSelected', true);
}.property('segments.@each.isSelected')
});
そしてApp.Semgent
App.Segment = DS.Model.extend({
selection: DS.belongsTo('selection')
});