2013-04-16 67 views
1

我在使用ember-data rev12實現我所瞭解的多態關係時遇到了困難。多態has has和belongsTo中的關係ember-data rev 12

我有以下型號:

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

回答

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}} 

我不知道,如果你也想加入到這幾款listables列表同時。根據你的模型名稱,我很想知道它不是你想要的:列表應該包含不同的對象(項目,建議,僱員)。而不是一個項目可以有多個列表。

+0

好的,我添加了一些更多的模型,我的例子。我想唯一的辦法是爲每個父母創建一個列表模型。唯一的困擾是,如果我爲每個例如(App.ProjectList listable:belongsTo'Project',{poly:y})創建一個單獨的列表模型,這些鍵是正確的,但是json根和url是錯誤的。例如(put =「api/project_lists」payload = {project_list:{listable_type:project,listable_id:100})。必須有一種方法來使用type和type_id設置hasMany多態列表。感謝您的洞察力。 –

+0

這樣的作品,但有一些問題。你如何定義多個多態的hasMany關係,例如項目和員工都有很多任務。是否可以從可列表和任務類擴展? –

+0

也我的後端(導軌)預計類型被camelcased。是否可以指定類型?listable_type:'project'實際上應該是listable_type:'Project' –