我有一个有两个关系的用户模型(myFriends和friendsWithMe)。交集是代表真正朋友的用户数组。我用RSVP.all解决了这个计算:
friends: function() {
var ret = [];
Ember.RSVP.all([this.get('myFriends'), this.get('friendsWithMe')]).then(function(results) {
ret.pushObjects(_.intersection(results[0].get('content'), results[1].get('content'))) ;
});
return ret;
}.property('myFriends.@each', 'friendsWithMe.@each'),
问题是现在我有另一个依赖于这个的计算属性:
/**
* Gives the relation between two User
* 4: has requested your friendship
* 3: Yourself
* 2: Friends
* 1: FriendShip Request
*/
myFriendshipStatus: function() {
if(this.get('friends').contains(this.container.lookup('user:current'))){
return 2;
} else if(this.get('friendsWithMe').contains(this.container.lookup('user:current'))){
return 4;
} else if(this.get('myFriends').contains(this.container.lookup('user:current'))){
return 1;
} else if (this.get('id') === this.container.lookup('user:current').get('id')){
return 3;
} else {
return 0;
}
}.property('friends.@each')
当我现在调试myFriendShipStatus时,承诺未解析且“friends”数组还没有条目。
我还尝试将我的朋友功能更改为ember.computed.intersect,它将如下所示:
friends: function() {
return Ember.computed.intersect('myFriends', 'friendsWithMe')
}.property('myFriends.@each', 'friendsWithMe.@each'),
但是我从这一行得到了一个例外:
如果(this.get( '朋友')包含(this.container.lookup( '用户:当前'))){
因为ArrayComputedProperty没有包含函数。
如何让我的朋友与myFriendShipStatus一起工作?我更喜欢使用Ember.computed.intersect,但我不知道如何检查它的值。
答案 0 :(得分:0)
在第一个示例中返回空数组的原因如下。在Ember.RSVP.all()调用之后,将立即执行return语句,返回一个空的 ret 数组。在未来的某个时候,RSVP承诺将实现,但由于friends函数已经返回空数组,这将无效。
以下是您可以做的事情:
// See http://emberjs.com/api/#method_A
friends: Ember.A,
recalculateFriends: function() {
Ember.RSVP.all([this.get('myFriends'), this.get('friendsWithMe')]).then(function(results) {
var myFriends = results[0], friendsWithMe = results[1];
this.set('friends', _.intersection(myFriends.get('content'), friendsWithMe.get('content')));
});
}.property('myFriends', 'friendsWithMe'), // @each is redundant here
myFriendshipStatus: function() {
// Will be recalculated when the friends array changes (which will in turn recalculate when myFriends or friendsWithMe changes
}.property('friends'),
而且......我现在才注意到你正在使用Ember.computed.intersect错误:P它不应该包含在函数中:
friends: Ember.computed.intersect('myFriends', 'friendsWithMe')