如何使用Ember Data提供的钩子

时间:2013-04-18 16:20:00

标签: ember.js ember-data

我正在尝试利用通过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'

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。我建议继承DS.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中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'

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