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

Javascript Ember.js:一个模型如何观察其他模型?,javascript,model-view-controller,ember.js,model,Javascript,Model View Controller,Ember.js,Model,我的源有一个模型,每个段有一个模型。每个源都有许多段。每个段都有一个操作,用于切换isSelected属性 我需要保留一个选定段的更新列表。我的第一个想法是做一些像 App.Source = Ember.Object.extend({ selectedSourceList = Em.A(), selectedSourcesObserver: function() { // code to update array selectedSourceList }.observes(

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

我需要保留一个选定段的更新列表。我的第一个想法是做一些像

App.Source = Ember.Object.extend({
  selectedSourceList = Em.A(),

  selectedSourcesObserver: function() {
    // code to update array selectedSourceList
  }.observes('segment.isSelected')
});
。。但是这个函数是不对的。我是新加入灰烬的,所以我的方法可能是完全错误的

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


编辑:更正名称,表明分段模型用于单个分段,而不是分段的集合(这是我计划在源模型中所做的)。

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

  • 如何观察收藏
  • 一般观察员
  • 管理关系
  • 观察收藏 @each属性有助于观察集合中项目的属性:
    segments.@each.isSelected

    一般观察员 函数上的
    .observes()
    是设置观察者函数的简写。如果此函数的目标是更新集合,则最好使用
    .property()
    设置观察者并将函数视为属性:

    selectedSegments: function() {
      return this.get('segments').filterProperty('isSelected', true);
    }.property('segments.@each.isSelected')
    
    这意味着
    selectedSegments
    是来自此对象的段的子集,这些段被选中,并在项目被删除或标记为选中时自动管理

    管理关系 对于普通余烬对象,您需要管理关系,将新项目推送到数组中,等等

    segments = Em.A(), //somehow you are managing this collection, pushing segments into it 
    
    还要注意余烬对象和余烬模型之间的差异。Ember Data是一个可选的附加库,它允许指定模型和关系,并帮助您管理模型。使用余烬数据,您可能会遇到以下情况:

    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')
    });
    

    是的,我的模特可能没什么关系。我只是在解决这个问题。上面的代码是否创建了这种关系?看起来它只是在同一个模型中创建了一个属性。我进入余烬大约8天,使用余烬数据与否一直是我很难弄清楚的。对于我是否应该在生产项目中使用它,似乎存在分歧。最终,我可以得到的第一个工作代码没有使用余烬数据,所以我正在运行它。这就是我在这里遇到的麻烦/困惑的一部分吗?不,我认为问题是可分的:1)过滤数组(谁在乎你是如何得到数组的)和2)管理关系(hasMany会帮助管理数组)。上面的代码没有设置关系,您需要以某种方式将对象推入段中。Ember数据模型将使用DS.Model.extend()创建。非常有用。现在工作得很好。竖起大拇指。