Ember数据:在两个模型之间使用多个belongsTo关系时解决模糊反转

时间:2015-02-19 01:22:54

标签: ember.js ember-data ember-cli

假设我有两个Ember数据模型:competitionparticipant

我的竞赛模型存储以下数据:datefirstsecondthirdfirstsecondthird属性都会存储排在第一,第二和第三位的独特竞争对手的ID。

我的participant模型存储以下数据:namesurnamecompetition

参赛者只参加一场比赛,因此participant模型在hasMany上不需要competition关系。

如何在Ember数据中对此进行建模?

这是我认为可行的方法:

// app/models/competition.js

export default DS.Model.extend({
  rev: DS.attr('string'),
  date: DS.attr('date', {defaultValue: function() { return new Date(); }}),
  first: DS.belongsTo('participant'),
  second: DS.belongsTo('participant'),
  third: DS.belongsTo('participant')
});

// app/models/participant.js

export default DS.Model.extend({
  rev: DS.attr('string'),
  name: DS.attr('string'),
  surname: DS.attr('string'),
  competition: DS.belongsTo('competition')
});

问题是competition上的participant.js密钥需要明确的反转,并且无法知道它可能与competition上的三个密钥中的哪一个相关联

我应该如何指定我的反转? competitionparticipant模型都需要明确的反转吗?如果是这样,它们应该是什么?这种数据结构在Ember Data中是否可行?我应该完全采用不同的方法吗?

请权衡。我已经把这个问题转过头来了几个小时,我的解决方法都没有成功。

1 个答案:

答案 0 :(得分:0)

我自己还没有使用过ember-data多态关联,但我相信一个多态的belongsTo关联可能适合你的需求。我的答案改编自blog post 。另请查看以下两个教程:http://www.toptal.com/emberjs/a-thorough-guide-to-ember-datahttp://blog.unspace.ca/post/107228551852/luke-galea-on-ember-data-polymorphic-associations

 //app/models/competition.js
 export default DS.Model.extend({
   rev: DS.attr('string'),
   date: DS.attr('date', {defaultValue: function() { return new Date(); }}),
   participant: DS.belongsTo("particpant", {polymorphic: true,   async: true})
  });

 // app/models/participant.js
 export default DS.Model.extend({
   rev: DS.attr('string'),
   name: DS.attr('string'),
   surname: DS.attr('string'),
   competition: DS.belongsTo('competition')
 });

 // app/models/first.js
 import Participant from '../participant';
 export default Participant.extend({
 });

 // app/models/second.js
 import Participant from '../participant';
 export default Participant.extend({
 });