Ember.js 如何使用Ember数据提供的挂钩
我试图利用通过Ember数据源代码注释的钩子,但我似乎无法以调用方法的方式实现这些方法 我目前正在尝试使用Ember.js 如何使用Ember数据提供的挂钩,ember.js,ember-data,Ember.js,Ember Data,我试图利用通过Ember数据源代码注释的钩子,但我似乎无法以调用方法的方式实现这些方法 我目前正在尝试使用键forpolymorphictype,它是DS.JSONSerializer中的一个钩子,可以在序列化器子类中使用它进行自定义 多态关联的名称如何转换为该类型的键。下面是我当前设置它的方式 var jsonSerializer = DS.JSONSerializer.extend({ keyForPolymorphicType: function(name) { debugge
键forpolymorphictype
,它是DS.JSONSerializer
中的一个钩子,可以在序列化器子类中使用它进行自定义
多态关联的名称如何转换为该类型的键。下面是我当前设置它的方式
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'
你在正确的轨道上。我建议继承自
DS.RESTSerializer
,而不是DS.JSONSerializer
我的猜测是,您正在针对没有正确实现多态关联的模型测试代码
看看这个测试:
在文件的顶部,您可以看到如何设置存储、适配器、序列化程序和模型
更新(描述模型后)
需要注意的一点是,其余序列化程序的camelize/decamelize属性。你没有这样做。(server\u config\u id
->serverConfig
)
关联的属性具有描述模型的名称,而不是json中id的属性(note\u id
->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'
我不清楚这个设计是否是你想要的,因为目前不需要多态关联。您可以减少您定义的模型数量。您走对了方向。我建议继承自
DS.RESTSerializer
,而不是DS.JSONSerializer
我的猜测是,您正在针对没有正确实现多态关联的模型测试代码
看看这个测试:
在文件的顶部,您可以看到如何设置存储、适配器、序列化程序和模型
更新(描述模型后)
需要注意的一点是,其余序列化程序的camelize/decamelize属性。你没有这样做。(server\u config\u id
->serverConfig
)
关联的属性具有描述模型的名称,而不是json中id的属性(note\u id
->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'
我不清楚这个设计是否是你想要的,因为目前不需要多态关联。您可以减少您定义的模型数量。Cyril,非常感谢。我不确定要使用什么序列化程序,我在提交时一直遵循这个示例,您提到它使用
JSONSerializer
,但这可能并不意味着要使用它。我有一个多态的assoc正在工作,这只是我正在添加的第二个assoc给了我一个问题。我得到一个关于如何设置别名的错误,如果我设置了它,它会说它已经被设置了:)我最终会得到它。谢谢你的工作,感谢你花时间回复每个人。我觉得可以免费发布你的模型以及你如何声明别名,我很乐意帮助你。很好!我添加了模型,我的别名在原始帖子中出现,只有一个,因为当我声明部分
别名时,它告诉我部分
别名已经声明。我还应该补充的是,一切都在代码的组件/可共享端工作。。。只有note和notable不能从关联中获取类型“part”。我还使用ActiveModelSerializer,因此负载是标准的侧加载。谢谢西里尔,非常感谢你。我不确定要使用什么序列化程序,我在提交时一直遵循这个示例,您提到它使用JSONSerializer
,但这可能并不意味着要使用它。我有一个多态的assoc正在工作,这只是我正在添加的第二个assoc给了我一个问题。我得到一个关于如何设置别名的错误,如果我设置了它,它会说它已经被设置了:)我最终会得到它。谢谢你的工作,感谢你花时间回复每个人。我觉得可以免费发布你的模型以及你如何声明别名,我很乐意帮助你。很好!我添加了模型,我的别名在原始帖子中出现,只有一个,因为当我声明部分
别名时,它告诉我部分
别名已经声明。我还应该补充的是,一切都在代码的组件/可共享端工作。。。只有note和notable不能从关联中获取类型“part”。我还使用ActiveModelSerializer,因此负载是标准的侧加载。谢谢