簡體   English   中英

Ember.js:一個模型如何觀察其他模型?

[英]Ember.js: How one model can observe other models?

我的sources模型和每個segment的模型。 每個來源都有很多細分。 每個段都有一個切換isSelected屬性的操作。

我需要保留所選段的更新列表。 我的第一個想法是做一些像......

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

  selectedSourcesObserver: function() {
    // code to update array selectedSourceList
  }.observes('segment.isSelected')
});

..但是observes()函數不對。 我是新手,所以我的做法可能完全錯了。

一個模型中的方法如何觀察許多其他模型的屬性?

編輯 :更正名稱以指示段模型是針對單個段 - 而不是段的集合(這是我計划在源模型中執行的操作)。

我認為你的問題有三個部分:

  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 Objects和Ember Models之間的區別。 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')
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM