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