我正在尝试利用通过Ember Data源代码评论的钩子,但我似乎无法以调用它们的方式实现这些方法。
我目前正在尝试使用keyForPolyMorphicType
这是DS.JSONSerializer
中的一个钩子,A hook you can use in your serializer subclass to customize
how a polymorphic association's name is converted into a key for the type.
,这就是我目前如何设置
var jsonSerializer = DS.JSONSerializer.extend({
keyForPolymorphicType: function(name) {
debugger
}
})
var serializer = jsonSerializer.create()
DS.RESTAdapter.configure('ServerDemo.Component', {
alias: 'component'
});
ServerDemo.Adapter = DS.RESTAdapter.extend({
bulkCommit: false
,serializer: serializer
});
ServerDemo.Store = DS.Store.extend({
revision: 12,
adapter: ServerDemo.Adapter.create()
});
如果有人可以提供有关如何使用整个来源的挂钩的指导,那将会很有帮助
修改
以下是我的模特
ServerDemo.Note = DS.Model.extend
title: DS.attr 'string'
content: DS.attr 'string'
index: DS.attr 'number'
noteable: DS.belongsTo 'ServerDemo.Noteable'
ServerDemo.Noteable = DS.Model.extend
note_ids: DS.hasMany 'ServerDemo.Note'
ServerDemo.Part = ServerDemo.Noteable.extend
rack_pos: DS.attr 'number'
server_config_id: DS.belongsTo 'ServerDemo.ServerConfig'
partable: DS.belongsTo 'ServerDemo.Partable', { polymorphic: true }
note_ids: DS.hasMany 'ServerDemo.Note'
semanticRackPos: (->
"rack_pos_#{this.get('rack_pos')}"
).property('rack_pos')
ServerDemo.Partable = DS.Model.extend
part_ids: DS.hasMany 'ServerDemo.Part'
ServerDemo.Component = ServerDemo.Partable.extend
back_image: DS.attr 'string'
cols: DS.attr 'number'
rows: DS.attr 'number'
front_image: DS.attr 'string'
name: DS.attr 'string'
答案 0 :(得分:1)
你走在正确的轨道上。我建议继承DS.RESTSerializer
而不是DS.JSONSerializer
。
我的猜测是,您正在针对未正确实现多态关联的模型测试您的代码。
在文件的顶部,您可以看到如何设置商店,适配器,序列化器和模型。
更新(描述模型后)。
要注意的一件事是REST序列化器的camelize / decamelize属性。你没有这样做。 (server_config_id
- > serverConfig
)
关联的属性有一个描述模型的名称,而不是json中id的属性(note_ids
- > notes
)
你可以这样工作:
ServerDemo.Note = DS.Model.extend
title: DS.attr 'string'
content: DS.attr 'string'
index: DS.attr 'number'
noteable: DS.belongsTo 'ServerDemo.Noteable', {polymorphic: true}
ServerDemo.Noteable = DS.Model.extend
notes: DS.hasMany 'ServerDemo.Note'
ServerDemo.Part = ServerDemo.Noteable.extend
rack_pos: DS.attr 'number'
serverConfig: DS.belongsTo 'ServerDemo.ServerConfig'
partable: DS.belongsTo 'ServerDemo.Partable', {polymorphic: true}
semanticRackPos: (->
"rack_pos_#{this.get('rack_pos')}"
).property('rack_pos')
ServerDemo.Partable = DS.Model.extend
parts: DS.hasMany 'ServerDemo.Part'
ServerDemo.Component = ServerDemo.Partable.extend
back_image: DS.attr 'string'
cols: DS.attr 'number'
rows: DS.attr 'number'
front_image: DS.attr 'string'
name: DS.attr 'string'
我不清楚这个设计是否是您正在寻找的,因为目前不需要多态关联。您可以减少定义的模型数量。