我有一个Ember Data模型:
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,因此'朋友。@ each'已被弃用。基础数据在后备存储(EmberFire)中正确更新。我已调试到EmberData,我看到属性已更改通知失效代码被调用。这只是代码的选择...
我错过了什么......?有没有更好的方法来解决这个问题?
答案 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。