2014-01-10 78 views
2

當在Ember-Data中使用hasManybelongsTo關係時,是否必須指定一個類,還是可以指定一個mixin?例如,我有一個Attachement模型,我想鏈接到一些其他模型。具體而言,我想將Attachement s分配給Project s和Components。我可以在ProjectsComponent上使用mixin,並使用該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正式支持的東西嗎?

回答

1

我已經花了最後一天測試和研究這個問題,我終於找到了答案:不。我做了相當多的測試,並且無法使其工作。最後,我發現這是因爲mixins(據我所知)不在對象的原型鏈中。

爲了解決這個問題,我剛剛結束了使用多個關係而不是單個多態。它不完全像面向對象,但更明確。

4

在我們使用Ember 2.4的項目中,我們有很少的實體,任務,分配和標籤。任務是taggable通過多態關聯可分配

這是我們的模型結構:

// 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 
});