Ember.js 保存与余烬数据的父对象id关系

Ember.js 保存与余烬数据的父对象id关系,ember.js,ember-data,Ember.js,Ember Data,好的。我已经仔细查看了Google返回的SO和其他来源,但还没有找到我的问题的答案 我有两种型号: App.Kid = Ember.Model.extend title: DS.attr "string" parent: DS.belongsTo "App.Parent" App.Parent = Ember.Model.extend title: DS.attr "string" kids: DS.hasMany "App.Kid" 这里的大多数问题都讨论了

好的。我已经仔细查看了Google返回的SO和其他来源,但还没有找到我的问题的答案

我有两种型号:

App.Kid = Ember.Model.extend
    title: DS.attr "string"
    parent: DS.belongsTo "App.Parent"

App.Parent = Ember.Model.extend
    title: DS.attr "string"
    kids: DS.hasMany "App.Kid"
这里的大多数问题都讨论了从侧面加载的JSON数据中检索余烬数据关系,这是我能够做到的。我需要知道的是,在创建新孩子时,如何保存家长id

目前,我正在App.KidController中保存一个新孩子,如下所示:

App.ParentController = Ember.ObjectController.extend
    needs: [ "widgets" ]

App.KidCreateController = Ember.ObjectController.extend
    needs: [ "dashboard" ]

    saveChild: ->
        @content.get( "store" ).commit()
当保存时,没有要查看的父对象id,但是我会得到一个id为0的新父对象(分配给父键)

谁能解释一下我做错了什么

更新1

所以,根据我的实际情况,我会解释我在做什么

一个用户有多个仪表盘,仪表盘上连接有多个小部件。我的模型结构如下所示:

App.Dashboard = DS.Model.extend
    title: DS.attr "string"
    widgets: DS.hasMany "App.Widget"

App.Widget = DS.Model.extend
    title: DS.attr "string"
    type:  DS.attr "string"
    ...
    dashboard: DS.belongsTo "App.Dashboard"
{{#each parent in model itemController="parent"}}
   <strong>(id: {{parent.id}}) {{parent.title}}</strong>
   <div class="well">
     <strong>Kids</strong>
     <ul>
     {{#each kid in parent.kids}}
       <li>(id: {{kid.id}}) {{kid.title}}</li>
     {{/each}}
     </ul>
     Kid name: {{input valueBinding="newKidName"}} <button class="btn btn-info" {{action saveChild newKidName}}>Add kid</button>
   </div>
{{/each}}
首先需要注意的是,您已经用
ember数据
标记了您的问题,但是您正在使用
ember.Model.extend
定义您的模型,这在使用
ember.Model
作为持久性库时使用,因此您应该将其更改为
DS.Model.extend
或以不同的方式标记您的问题,在我的回答中,我假设了余烬数据

如果您的
App.Kid
模型属于
App.Parent
kids
数组,那么您应该使用
ParentController
保存属于该父对象的新孩子,这样您就可以访问父对象
id
以及推送新孩子所需的
kids
数组进入

例子: 给出一个简单的模板,如下所示:

App.Dashboard = DS.Model.extend
    title: DS.attr "string"
    widgets: DS.hasMany "App.Widget"

App.Widget = DS.Model.extend
    title: DS.attr "string"
    type:  DS.attr "string"
    ...
    dashboard: DS.belongsTo "App.Dashboard"
{{#each parent in model itemController="parent"}}
   <strong>(id: {{parent.id}}) {{parent.title}}</strong>
   <div class="well">
     <strong>Kids</strong>
     <ul>
     {{#each kid in parent.kids}}
       <li>(id: {{kid.id}}) {{kid.title}}</li>
     {{/each}}
     </ul>
     Kid name: {{input valueBinding="newKidName"}} <button class="btn btn-info" {{action saveChild newKidName}}>Add kid</button>
   </div>
{{/each}}
有关示例的简单演示,请参见此处:


希望有帮助。

嗯,原来我是个白痴。我使用Laravel作为后端,在定义模型时,您需要定义哪些属性是可填充的,但是我忘记了将dashboard_id添加到列表中。现在一切都很好。

我肯定离你更近了。但是,我仍然无法获取父ID。如果我按照您的演示进行操作,并在创建新记录时将ID添加到父项下,我将获得:
断言失败:您只能添加App.parent的记录。此关系的父项
您能想到我可能做错了什么吗?@Brayniverse,编辑了我的答案,我添加了
needs
,这样您就可以访问仪表板控制器,我还删除了显式设置家长,它应该可以正常工作。我对我们最初的家长-孩子示例中的切换感到有点困惑。您能将仪表板的使用改为原来的名称吗?我不应该这样做以避免混淆。我试图实现的是,一个用户有多个仪表板,每个仪表板都有几个小部件。@Brayniverse,很抱歉,我当时把你完全搞错了:(你的问题中只有
需要
,没有模型定义,我没有得到你真正想要的……如果你能提供更多的设置代码,我会再看一看