2

わかった。SO や Google から返されたその他の情報源をよく調べましたが、まだ問題の解決策が見つかりません。

私は2つのモデルを持っています:

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.extendember-modelDS.Model.extendember-data

モデルが配列を持つ にApp.Kid属している場合は、 を使用してその親に属する新しい子をこの方法で保存する必要があります。親と、新しい子をプッシュする必要がある配列にアクセスできます。App.ParentkidsParentControlleridkids

例:

次のような単純なテンプレートがあるとします。

{{#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次に、 for each 親アイテムを定義し、そこに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 に答える