多态hasEany和belongsTo关系在ember-data rev 12中

Aar*_*oir 1 ember.js ember-data

我无法使用ember-data rev12实现我所理解的多态关系.

我有以下型号:

App.Project = DS.Model.extend
  lists: DS.hasMany('App.List', { polymorphic: true })

App.Proposal = DS.Model.extend
  lists: DS.hasMany('App.List', { polymorphic: true })

App.Employee = DS.Model.extend
  lists: DS.hasMany('App.List', { polymorphic: true })

App.List = DS.Model.extend
  name: DS.attr('string')
  #project: DS.belongsTo('App.Project', { polymorphic: true })
Run Code Online (Sandbox Code Playgroud)

我试图从项目路由器创建一个新的列表,如此.

App.ProjectRoute = Ember.Route.extend
  events:
    newList: (project) ->
      lists = project.get('lists')
      list = App.List.createRecord(name: 'list1')
      lists.pushObject(list)
      @store.commit()
Run Code Online (Sandbox Code Playgroud)

但是对服务器的请求是错误地设置了多态键.

我期待有效载荷看起来像:

 { list: { name: list1, listable_type: project, listable_id: 100 } }
Run Code Online (Sandbox Code Playgroud)

但得到了:

{ list: { name: list1, project_type: project, project_id: 100 } }
Run Code Online (Sandbox Code Playgroud)

我错过了什么?有没有办法定义多态类型或键?


这是我的临时黑客

https://gist.github.com/arenoir/5409904

Cyr*_*uck 6

首先,根据您拥有的当前模型,您不需要使用多态关联.而且您可能不希望polymorphic在关系的两端设置选项.

如果要包含有效负载listable,只需重命名属性即可:

App.List = DS.Model.extend
  name: DS.attr('string')
  listable: DS.belongsTo('App.Project', { polymorphic: true })
Run Code Online (Sandbox Code Playgroud)

UPDATE

根据我对你的类的理解,它List可以属于不同的类型.所以你应该像这样定义你的模型:

App.Listable = DS.Model.extend
  lists: DS.hasMany('App.List')

App.Project = App.Listable.extend

App.Proposal = App.Listable.extend

App.Employee = App.Listable.extend

App.List = DS.Model.extend
  name: DS.attr('string')
  listable: DS.belongsTo('App.Listable', { polymorphic: true })
Run Code Online (Sandbox Code Playgroud)

并且有效负载将如下所示:

{list: {name: "list1", listable_type: 'project', listable_id: 100}}
Run Code Online (Sandbox Code Playgroud)

我不知道你是否也希望同时将一个列表添加到多个可列表中.根据您的模型名称,我很想相信它不是您想要的:列表应包含不同的对象(项目,提案,员工).而不是一个项目可以有多个列表.