Ember.js 保存与余烬数据的父对象id关系
好的。我已经仔细查看了Google返回的SO和其他来源,但还没有找到我的问题的答案 我有两种型号: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" 这里的大多数问题都讨论了
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,很抱歉,我当时把你完全搞错了:(你的问题中只有需要,没有模型定义,我没有得到你真正想要的……如果你能提供更多的设置代码,我会再看一看