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

时间:2013-04-16 19:42:39

标签: 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 })

我正在尝试从项目路由器创建一个新列表,如此。

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

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

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

 { list: { name: list1, listable_type: project, listable_id: 100 } }

但得到了:

{ list: { name: list1, project_type: project, project_id: 100 } }

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


这是我的临时黑客

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

1 个答案:

答案 0 :(得分:6)

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

如果您希望有效负载包含listable,则只需重命名您的属性:

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

<强>更新

根据我对您的类的理解,它是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 })

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

{list: {name: "list1", listable_type: 'project', listable_id: 100}}

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