好。我已经对谷歌和其他来源提供了真实的好看,但我还没有找到问题的答案。
我有两种模式:
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数据中检索ember数据关系,我能够做到这一点。我需要知道的是如何在创建新孩子时保存parent_id?
目前我正在App.KidController中保存一个新孩子,如下所示:
App.ParentController = Ember.ObjectController.extend
needs: [ "widgets" ]
App.KidCreateController = Ember.ObjectController.extend
needs: [ "dashboard" ]
saveChild: ->
@content.get( "store" ).commit()
保存时没有看到parent_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"
答案 0 :(得分:1)
首先请注意,您已使用
ember-data
标记了您的问题,但是您使用Ember.Model.extend
定义了模型,这些模型在使用ember-model
作为您的持久性库时使用,因此您应该更改它以DS.Model.extend
或以不同的方式标记您的问题,我在答案中假设ember-data
。
如果您的App.Kid
模型属于具有App.Parent
数组的kids
,那么您应使用ParentController
来保存属于该父级的新Childs,这样您就可以了将有权访问父id
及其kids
数组,您需要将新的Childs推入其中。
给出一个像这样的简单模板:
{{#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}}
然后,您应该为每个父项定义ParentController
并在那里创建saveChild
函数:
App.ParentController = Ember.ObjectController.extend({
needs: ['dashboard'],
saveChild: function(newKidName) {
// get the dashboard id you want with
// this.get('controllers.dashboard').get('id');
// this assumes you have one dashboard?
// create the new child
var newKid = App.Kid.createRecord({title: newKidName});
// push the newly created child into the parent's kids array
this.get('content').get('kids').pushObject(newKid);
// commit changes to the parent
this.get('content').get('store').commit();
}
});
请参阅此处以获取示例的简单演示:http://jsbin.com/odosoy/115/edit
希望它有所帮助。
答案 1 :(得分:1)
好吧,事实证明我是个白痴。我正在使用Laravel作为我的后端,在定义模型时,您需要定义哪些属性是可填充的,但是我忘了将dashboard_id添加到列表中。现在一切都很好。