2

好的。我已经通过谷歌返回的 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 数据中检索 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"
4

2 回答 2

1

首先需要注意的是,您已将问题标记为,ember-data但您正在定义模型,使用Ember.Model.extend它作为持久性库时使用的模型ember-model,因此您应该将其更改为DS.Model.extend或以不同方式标记您的问题,我假设ember-data在我的回答中。

如果您的App.Kid模型属于App.Parent具有kids数组的 a ,那么您应该使用 aParentController来保存属于该父级的新子级,这样您就可以访问父级id,并且它是kids您需要将新子级推入的数组。

例子:

给定一个像这样的简单模板:

{{#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

希望能帮助到你。

于 2013-08-26T10:04:07.093 回答
1

好吧,事实证明我是个白痴。我使用 Laravel 作为后端,在定义模型时,您需要定义哪些属性是可填充的,但是我忘记将 dashboard_id 添加到列表中。现在一切正常。

于 2013-08-26T20:10:36.833 回答