1

createRecordbelongsToオブジェクトを作成しません。

そのような関係があり、コメントが常に投稿内にPost-> hasOne -> Comment埋め込まれている場合に、子モデルオブジェクトを作成するための回避策はありますか?

これはPost -> hasMany -> Comments(ember-data-example のように) で動作します。助けが必要です。この問題で立ち往生しています。

    App.Test  = DS.Model.extend({
      text: DS.attr('string'),
      contact: DS.belongsTo('App.Contact')
    });
    App.Contact  = DS.Model.extend({
      id: DS.attr('number'),
      phoneNumbers: DS.hasMany('App.PhoneNumber'),
      test: DS.belongsTo('App.Test')
    });
    App.PhoneNumber = DS.Model.extend({
      number:  DS.attr('string'),
      contact: DS.belongsTo('App.Contact')
    });

    App.RESTSerializer = DS.RESTSerializer.extend({
    init: function() {
      this._super();

    this.map('App.Contact', {
      phoneNumbers: {embedded: 'always'},
      test: {embedded: 'always'}
    });
   }
});


/* in some controller code */
this.transitionToRoute('contact', this.get('content'));

次のコード行が機能します。

this.get('content.phoneNumbers').createRecord();

次のコード行は失敗します。

 this.get('content.test').createRecord();

エラーは次のとおりです。

Uncaught TypeError: Object <App.Test:ember354:null> has no method 'createRecord'

したがって、hasMany は createRecord で機能しますが、1:1 は失敗します。私は何か間違っていますか?正しい方法は何ですか/これを行うことは不可能ですか?

4

1 に答える 1

1

hasMany関係は で表されますDS.ManyArray。この配列はデフォルトで空ですが、createRecordメソッドを公開しています。

belongsTo関連付けは、レコードへの参照にすぎません。nullデフォルトです。したがって、それを呼び出すメソッドはありません。

あなたの場合、最初にレコードを作成してから、それを他のレコードに割り当てます。

this.set('test', App.Test.createRecord()); // the controller is a proxy to your model, no need to use content

App.Testまたは、連絡先を新しいレコードに割り当てることができます

App.Test.createRecord( { contact: this.get('content') } );
于 2013-04-20T16:12:55.343 に答える