Ember-data与多对多关系的奇怪行为

时间:2014-01-21 08:20:31

标签: ember.js many-to-many ember-data

我正在尝试在Ember实施一个友情关系系统,这是一种多对多的关系。我的模特是:

App.User = DS.Model.extend
  name: DS.attr('string')
  friendships: DS.hasMany('friendship', { inverse: 'user' })

App.Friendship = DS.Model.extend
  user: DS.belongsTo('user')
  friend: DS.belongsTo('user')

在我的用户控制器中,我有一个addFriend操作看起来大致相似(我从其他地方定义了currentUser):

App.UserController = Ember.ObjectController.extend
  actions:
    addFriend: ->
      friendship = @get('store').createRecord('friendship', 
        user: @get('currentUser')
        friend: @get('model')
      )
      @get('currentUser.friendships').pushObject(friendship)

从调试语句中,似乎friendship记录被推送到 BOTH friendships的{​​{1}}数组中,而currentUser表示的用户}}。我不希望这种情况发生,因为对于双向友好系统,model数组应该包含model.friendship的反转,即用户和朋友交换。当然如果Ember有办法自动完成这项工作会很好,但我也非常乐意手动完成。

目前,为什么friendship方法将相同的pushObject记录推送到两个用户记录中?我想这可能与模型中定义的反转方式有关。我尝试更改为friendship,但这并没有解决问题。引发此行为的ember-data引发了什么?或者我的代码中有一个我没见过的错误?任何摆脱这种行为的方法都将非常感激!

1 个答案:

答案 0 :(得分:1)

解决!事实证明我需要

App.Friendship = DS.Model.extend
  user: DS.belongsTo('user')
  friend: DS.belongsTo('user', { inverse: null })

我直截了当地认为答案与反转有关,但我最初没有将inverse: null放在正确的位置!