如何删除关联而不删除具有多对多关系的余烬中的记录?

时间:2015-01-06 11:33:56

标签: ember.js ember-data

通过查看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: -------------------------------

1 个答案:

答案 0 :(得分:2)

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

{{#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
    }
  }