1

我正在尝试利用通过 Ember Data 源代码注释的钩子,但我似乎无法以调用它们的方式实现这些方法。

我目前正在尝试使用keyForPolyMorphicTypewhich is a hook in 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'
4

1 回答 1

1

你在正确的轨道上。我建议继承 fromDS.RESTSerializer而不是DS.JSONSerializer.

我的猜测是您正在针对未正确实现多态关联的模型测试您的代码。

看看这个测试:https ://github.com/emberjs/data/blob/master/packages/ember-data/tests/integration/belongs_to_test.js#L119

在文件的顶部,您可以看到存储、适配器、序列化程序和模型是如何设置的。

更新(在你描述你的模型之后)。

需要注意的一件事是 REST 序列化程序 camelize/decamelize 属性。你没有这样做。( server_config_id-> serverConfig)

关联的属性有一个描述模型的名称,而不是 json ( note_ids-> notes)中 id 的属性

你可以这样工作:

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'

我不清楚这种设计是否是您正在寻找的,因为目前不需要多态关联。您可以减少定义的模型数量。

于 2013-04-18T17:33:35.330 回答