2015-09-26 117 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

请再次检查我的答案。我添加了另一个可能的解决方案 –

相关问题