Ember.js:一个模型如何观察其他模型



我有一个sources模型,每个segment都有一个模型。 每个源都有许多段。 每个段都有一个切换isSelected属性的操作。

我需要保留所选细分的更新列表。我的第一个想法是做一些类似的事情...

App.Source = Ember.Object.extend({
  selectedSourceList = Em.A(),
  selectedSourcesObserver: function() {
    // code to update array selectedSourceList
  }.observes('segment.isSelected')
});

.. 但是观察()函数是不对的。我是新手,所以我的方法可能是完全错误的。

一个模型中的方法如何观察许多其他模型的属性?

EDIT:更正了名称以指示段模型适用于单个段 - 而不是段的集合(这是我计划在源模型中执行的操作)。

我认为您的问题有三个部分:

  1. 如何观察集合
  2. 一般观察员
  3. 管理关系

观察集合

@each属性有助于观察集合中项的属性:segments.@each.isSelected

一般观察员

函数上的.observes()是设置观察器函数的简写。 如果此函数的目标是更新集合,则使用 .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.Segment = DS.Model.extend({
  selection: DS.belongsTo('selection')
});

最新更新