![](/img/trans.png)
[英]How can one controller observe events on an arbitrary controller/model in 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()函數不對。 我是新手,所以我的做法可能完全錯了。
一個模型中的方法如何觀察許多其他模型的屬性?
編輯 :更正名稱以指示段模型是針對單個段 - 而不是段的集合(這是我計划在源模型中執行的操作)。
我認為你的問題有三個部分:
@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.