我正在尝试使用Ember实现全面的友情系统(可以接受或拒绝的朋友请求,取消朋友请求和取消朋友的能力)。为了做到这一点,我让我的Rails后端通过JSON传递三个不同的friendship
数组到ember,这些数据在以下的ember模型中被捕获(删除了多余的东西):
App.User = DS.Model.extend
name: DS.attr('string')
friendships: DS.hasMany('friendship', { inverse: 'user' })
requestedFriendships: DS.hasMany('friendship', { inverse: 'user' })
pendingFriendships: DS.hasMany('friendship', { inverse: 'user' })
App.Friendship = DS.Model.extend
status: DS.attr('string') # can be 'accepted', 'requested', 'pending'
user: DS.belongsTo('user', { inverse: ??? }) # the problem is here
friend: DS.belongsTo('user', { inverse: null })
当我去尝试编写代码来添加/删除友谊时,ember抱怨我需要在user
模型中指定Friendship
的反转。我的问题是,将逆定义为静态定义为任何一个属性(例如'friendship'
)并不合理。我真正想要的是friendship.user
与[{1}}的倒数,'friendships'
的倒数为requestedFriendship.user
',以及'requestedFriendships
的倒数为{ {1}}。
我以为我可以通过将计算属性传递给inverse选项来使其工作,其中我根据友谊的pendingFriendship.user
计算将其分配给哪个字符串。我试过这样做:
'pendingFriendships'
但是
失败了status
我已经尝试过这个一般性的想法,我无法弄清楚如何以App.Friendship = DS.Model.extend
status: DS.attr('string') # can be 'accepted', 'requested', 'pending'
user: DS.belongsTo('user', { inverse: @get('userInverse') })
friend: DS.belongsTo('user', { inverse: null })
userInverse:
if @get('status') == 'accepted'
'friendships'
else if @get('status') == 'requested'
'requestedFriendships'
else
'pendingFriendships'
函数调用中Uncaught TypeError: Object [object global] has no method 'get'
访问this
的方式进行重新审核。
这对于使用ember-data成功实现全面社交网络至关重要的功能,但我找不到任何关于如何执行此操作或甚至是否可能的文档。 ember.js website几乎没有什么可说的,在他们的例子中,他们只是静态地将反转分配为可能的选择之一。但那么其他的呢?对我来说没有多大意义。
底线:我如何在上下文/动态/有条件地或以其他方式非静态地分配ember-data记录中元素的反转?或者,如果真的不可能,我还能怎样解决这个问题呢?