在Ember-Data中使用hasMany
和belongsTo
关系时,是否必须指定一个类,还是可以指定mixin?例如,我有一个Attachement
模型,我想链接到其他一些模型。具体来说,我想将Attachement
分配给Project
和Components
。我可以在Projects
和Component
上使用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正式支持的吗?
答案 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(据我所知)不在对象的原型链中。
为了解决这个问题,我最终使用了多个关系而不是一个多态关系。它不是面向对象的,而是更明确的。