与mixin的多态关系

时间:2014-01-10 16:36:08

标签: ember.js ember-data

在Ember-Data中使用hasManybelongsTo关系时,是否必须指定一个类,还是可以指定mixin?例如,我有一个Attachement模型,我想链接到其他一些模型。具体来说,我想将Attachement分配给ProjectComponents。我可以在ProjectsComponent上使用mixin并将mixin用作下面的反转吗?

App.Attachment = DS.Model.extend({
    attachedTo: DS.belongsTo('canHaveAttachments', { inverse: 'attachments'});
});

App.CanHaveAttachmentsMixin = DS.Mixin.create({});

App.Project = DS.Model.extend(App.CanHaveAttachmentsMixin, {
    attachments: DS.hasMany('attachment', { inverse: 'attachedTo' });
});

这是Ember正式支持的吗?

2 个答案:

答案 0 :(得分:6)

在我们使用Ember 2.4的项目中,我们有很少的实体,任务,分配和标签。任务通过多态关联可标记可分配

这是我们的模型结构:

// app/models/task.js
import DS from 'ember-data';
import Taggable from 'app/mixins/taggable';
import Assignable from 'app/mixins/assignable';

export default DS.Model.extend(Taggable, Assignable, {  

});

// app/models/tag.js
import DS from 'ember-data';

export default DS.Model.extend({
  taggable: DS.belongsTo('taggable', { polymorphic: true }),
});

// app/models/assignment.js
import DS from 'ember-data';

export default DS.Model.extend({
  assignable: DS.belongsTo('assignable', { polymorphic: true }),
});


// app/mixins/taggable.js
import Ember from 'ember';
import DS from 'ember-data';

export default Ember.Mixin.create({
  tag: DS.belongsTo('tag'), // you can go with hasMany here, we only have one-to-one association
});


// app/mixins/assignable.js
import Ember from 'ember';
import DS from 'ember-data';

export default Ember.Mixin.create({
  assignment: DS.belongsTo('assignment'), // you can go with hasMany here, we only have one-to-one association
});

答案 1 :(得分:1)

我花了最后一天测试和研究这个问题,我终于找到了答案:没有。我做了很多测试,无法让它工作。最后,我发现这是因为mixins(据我所知)不在对象的原型链中。

为了解决这个问题,我最终使用了多个关系而不是一个多态关系。它不是面向对象的,而是更明确的。