2015-09-26 93 views
2

我有灰燼數據模型:爲什麼我的Ember計算屬性hasMany關係不更新?

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    friends: DS.hasMany('friend',{async:true}), 
    requestedFriendIds: Ember.computed('friends',function(){ 
    return this.get('friends').then(function(friends){ 
     return friends.filterBy('status','Requested').mapBy('id'); 
    }); 
    }) 
}); 

我有一個使用它的路線設置:

export default Ember.Route.extend({ 
    model: function(params){ 
    return Ember.RSVP.hash({ 
     memberProfile:this.store.find('member-profile', params.memberprofile_id).then(function(memberProfile) 
     { 
     return Ember.RSVP.hash({ 
      requestedFriendIds:memberProfile.get('requestedFriendIds'), 
      UserId:memberProfile.get('user.id'), 
      Id:memberProfile.get('id') 
     }); 
     }), 
    }); 
    } 
}); 

},

和利用的路由模式htmlbars。我計算的屬性始終正確地叫上一重裝,但不會刷新用戶動作「添加好友」,通過把一個朋友改變了存儲和profile.friends'記錄是這樣的:

actions: 
{ 
    addFriend:function(profile_id,) 
    { 
    this.store.findRecord('member-profile',memberProfile).then(function(member){ 
     var friend = this.store.createRecord('friend', 
     { 
     member:member, 
     status:'Requested', 
     timestamp: new Date(), 
     }); 
     friend.save(); 
     member.get('friends').pushObject(friend); 
     member.save(); 
    }.bind(this)); 
} 

}

一些注意事項:我已經在「朋友」,「朋友。[]'上嘗試過計算的屬性。我的代碼基礎是Ember 2.0.1,Ember.Data 1.13.12,因此不推薦使用「friends。@ each」。底層數據在後備存儲(EmberFire)中正確更新。我已經調試到EmberData,我看到屬性更改通知失效代碼被調用。這只是選擇的代碼...

我錯過了什麼......?有沒有更好的方法來解決這個問題?

+0

我相信你想在CP上觀看'friends。@ each'。 – sbatson5

+0

@each在Ember 2中已棄用。*。我會更新我的問題。 – tillerstarr

+0

只看「朋友。@每個」並不是它的設計目的。它應該是'朋友。[]'肯定。 –

回答

0

我想你應該看的friends.[]不是僅僅friends

requestedFriendIds: Ember.computed('friends.[]',function(){ 
    return this.get('friends').then(function(friends){ 
     return friends.filterBy('status','Requested').mapBy('id'); 
    }); 
    }) 

而且你很可能把你的行動路線和手動刷新模式(這可能是問題與承諾結果不綁定到CP的變化)。因此,在路線:

actions: { 
    addFriend(profile_id) { 
    this.store.findRecord('member-profile', memberProfile).then(member => { 
     let friend = this.store.createRecord('friend', 
     { 
     member:member, 
     status:'Requested', 
     timestamp: new Date() 
     }); 
     friend.save(); 
     member.get('friends').pushObject(friend); 
     member.save(); 

     this.refresh(); 
    }); 
    } 
} 

最重要的部分是用this.refresh() in Ember.Route

+0

我試過了(如注意到的一些註釋) – tillerstarr

+0

請再次檢查我的答案。我添加了另一個可能的解決方案 –

相關問題