2014-01-10 2 views
2

Ember-Data에서 hasManybelongsTo 관계를 사용할 때 클래스를 지정해야합니까, 아니면 믹스 인을 지정할 수 있습니까? 예를 들어, Attachement 모델을 다른 모델과 연결하고 싶습니다. 특히 AttachementProjectComponents에 할당하려고합니다. 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

나는이 문제를 테스트하고 연구하는 데 드디어 보냈다. 나는 결국 대답을 찾았다. 나는 꽤 많은 테스트를했고 제대로 작동하지 못했습니다. 마침내 믹스 인 (내가 말할 수있는 한)이 객체의 프로토 타입 체인에 없기 때문입니다.

문제를 해결하기 위해 단일 다형성 대신 여러 관계를 사용했습니다. 그것은 객체 지향적이지는 않지만 좀 더 명확합니다.

4

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

이 우리의 모델 구조

관련 문제