は、私はいくつかのエンバーデータモデルを管理しますXMPPパーサを書き込もうとしています。情報は非同期的に入ってくるのでAFAIKはアダプタパターンにうまく収まらない。私は少しの情報を得るかもしれない多くのケースがあり、これに基づいてモデルを部分的に更新したいと思います。例えば部分エンバーデータを使用して負荷との関係
、プレゼンスメッセージが到着すると、私はそう、私はステータスの歴史を作成することができ、これを保存したいのですが、私はまた、この新しい情報との接触を見つけて更新します。連絡先には、プレゼンスとは何の関係もない他の多くの属性が含まれている可能性があります。連絡先とプレゼンスモデルとの間には、1対1の関係があります。私は少しこのようになりますいくつかのコードを持っている瞬間
:
Frabjous.Contact = DS.Model.extend({
primaryKey: 'jid',
jid: DS.attr('jidString'),
...
presence_history: DS.hasMany('Frabjous.Presence'),
});
Frabjous.Presence = DS.Model.extend({
from: DS.attr('jidString'),
...
contact: DS.belongsTo('Frabjous.Contact'),
didLoad: function(){
var contact;
var type = Frabjous.Contact;
var contact_id = this.get('from').toString();
var contact_client_id = Frabjous.Store.clientIdForId(type, contact_id);
if(Ember.none(contact_client_id)){
// No contact exists, so create one
Frabjous.Store.load(type,{jid: this.get('from'), presence_history:[this.get('id')]});
contact = Frabjous.Store.find(type,contact_id);
}else{
// Update contact
contact = Frabjous.Store.find(type,contact_id);
// !!! this DOES NOT work
var history = contact.get('presence_history');
history.addObject(this);
contact.set('presence_history',history);
}
// !!! this DOES work
this.set('contact',contact);
}
新しいプレゼンスメッセージが来るとは接触が存在しない場合は、それが1つを作成し、正しく使用して関係を構築しますロードメソッド。しかし、私はその後、動作しないset
を使用してpresence_historyに存在レコードを追加したい場合。面白いことに、set
はプレゼンス側を扱うときに機能します。
私はでそれを行うことが可能である発見した:
...
contact.get('presence_history').addObject(this);
...
これは、オブジェクトが追加されますが、それはオブザーバーのいずれかへの更新をトリガしません。
私は間違っていますか?