如何在不删除具有多对多关系的 ember 中的记录的情况下删除关联?

How to remove association without deleting record in ember with many-to-many relationship?

通过查看 SO 上的各种问题,我了解到 ember 和 hasMany 关系存在问题。我正在使用 ember-data 1.0.0-beta.12,我正在尝试了解当前的状态。

我的应用有一个 Player 模型和一个 Tournament 模型,锦标赛有多个玩家,玩家可以参加多个锦标赛。这是我的模型:

var Player = DS.Model.extend({
  name: DS.attr('string'),
  tournaments: DS.hasMany('tournaments', {async: true}),
});

var Tournament = DS.Model.extend({
  title: DS.attr('string'),
  players: DS.hasMany('player', {async: true}),
});

我有一个模板,其中列出了锦标赛中的玩家:

{{#each player in players}}
    <a class="list-group-item" href="#" {{action 'removePlayer' NOT_SURE_WHAT_MODEL_TO_PASS}}>
      {{player.name}}
    </a>
{{/each}}

我开始定义我的 removePlayer 操作,但我卡住了。我可以将锦标赛或玩家传递给行动,但似乎我需要两者。然后一旦我有了它们,我不知道可以使用什么方法来删除关系,我在文档中找不到任何相关信息,并且它在网络上看到了各种方法。

如何将玩家和锦标赛模型都传递给我的控制器?在不删除任何一条记录的情况下删除关联的最直接方法是什么?

我正在使用 ember-cli 0.1.5,具有以下版本:

DEBUG: -------------------------------
ember.js:15373 DEBUG: Ember      : 1.8.1
ember.js:15373 DEBUG: Ember Data : 1.0.0-beta.12
ember.js:15373 DEBUG: Handlebars : 1.3.0
ember.js:15373 DEBUG: jQuery     : 1.11.2
ember.js:15373 DEBUG: -------------------------------

您可以将锦标赛和玩家都传递给操作:

{{#each player in players}}
    <a class="list-group-item" href="#" {{action 'removePlayer' player tournament}}>
      {{player.name}}
    </a>
{{/each}}

然后在您的控制器中执行一个采用多个参数的操作:

  actions: {
    removePlayer: function(player, tournament) {
      tournament.get('players').removeObject(player);
      // you can save the tournament and player here, unless you are handling that as part of another action
    }
  }