Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何使用Ember数据提供的挂钩_Ember.js_Ember Data - Fatal编程技术网

Ember.js 如何使用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

我试图利用通过Ember数据源代码注释的钩子,但我似乎无法以调用方法的方式实现这些方法

我目前正在尝试使用
键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,因此负载是标准的侧加载。谢谢