在ember-data中动态/有条件地设置反向选项?

时间:2014-01-28 09:27:58

标签: ember.js ember-data

我正在尝试使用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记录中元素的反转?或者,如果真的不可能,我还能怎样解决这个问题呢?

0 个答案:

没有答案