일부 Ember 데이터 모델을 관리 할 XMPP 파서를 작성하려고합니다. 정보가 비동기 적으로 들어 오므로 AFAIK은 어댑터 패턴에 깔끔하게 맞지 않습니다. 약간의 정보를 얻을 수있는 경우가 많이 있으며이를 기반으로 부분적으로 모델을 업데이트하려고합니다.Ember를 사용한 부분로드 데이터 및 관계
예를 들어 현재 상태 메시지가 도착하면이 상태를 저장하여 상태 기록을 만들 수 있지만이 새로운 정보로 연락처를 찾고 업데이트하려고합니다. 연락처에는 현재 상태와 관련이없는 많은 다른 특성이있을 수 있습니다. 연락처와 현재 상태 모델간에 일대일 관계가 있습니다. 순간
나는 보이는 몇 가지 코드를 갖고이 같은 비트 :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);
}
새로운 존재 메시지가 접촉이없는 경우, 그것은 하나를 작성하고를 사용하여 제대로 관계를 구축 할 예정에 온다 로드 방법. 그러나 presence_history에 현재 상태 레코드를 추가하려면 set
을 사용하면 작동하지 않습니다. 흥미롭게도 set
은 현재 상태를 처리 할 때 작동합니다.
나는 그것을 할 수 있습니다 발견했습니다 :
...
contact.get('presence_history').addObject(this);
...
이 개체를 추가,하지만 관찰자의 업데이트를 트리거하지 않습니다.
내가 뭘 잘못하고 있니?