2017-08-22 1 views
0

私はember jsに手をかけています。オブジェクトプロキシの 'content'プロパティにset( 'personName'、s)を委任できません。 'DS.PromiseObject:ember323>:' content 'は定義されていません

{{client-form client=model.client person=model.client.person address=model.client.residentialAddress errors=model.errors onSave=(action "save") }} 
01:文字列属性を持つ単一のモデルが簡単で、モデル内の複数のモデルを使用して...

model/client.js 
export default DS.Model.extend({ 
    person: DS.belongsTo('person', {async: false, inverse: 'client'}), 
    postalAddress : DS.belongsTo('address', {async: false}) , 
    residentialAddress : DS.belongsTo('address', {async: true}) , 
    personName: DS.attr('string'), //added from person 
    greeting : DS.attr('string') //added from person 
    }); 
model/person.js 
export default DS.Model.extend({ 
    name : DS.attr('string'), 
    personName : DS.attr('string'), 
    greeting : DS.attr('string') , 
    client: DS.belongsTo('client', {inverse: 'person'}) 
}); 

マイルート ルート/クライアント/

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return Ember.RSVP.hash({ 

     'client': this.get('store').createRecord('client' , 
      { //does this not initialize person 
      person: 'person', address: 'address' 
      }), 
     //) 
//does this not initialize person 
      'person': this.get('store').createRecord('person',{ 
      client: 'client' 
      }), 
      'address': this.get('store').createRecord('address') 
     } 
    ); 
    } 
}); 

を作成し、私のテンプレートは、唯一のラインを持っています私のクライアントform.hbsで

iはclient.person.personNameまたはclient.person.greeting呼ばいくつかのフィールドを持っていた、と私は最初の文字を入力したとき、私は

Assertion Failed: Cannot call set with 'greeting' on an undefined object. 
挨拶のために取得したり、PERSONNAMEう

私はpersonNameと挨拶をクライアントモデルに直接追加して、client.personNameとclient.greetingを参照する2つのフィールドを追加しました。これらのフィールドは問題がありません。私は人のモデルが初期化されておらず、おそらくクライアントはインスタンス化されていますが、人と住所は異なり、人は未定義のオブジェクトだと考えています。

ようなモデルの理由は、私はJavaのバックエンドを持っていると私のClientDTOがのように見えるということです。

public class ClientDTO /*implements IsSerializable*/ { 

    private PersonDTO personDTO; 
    private AddressDTO postalAddress; 
    private AddressDTO residentialAddress; 
私は人とアドレスを初期化見逃している、私はエラーを持つ皆さんは「 を呼び出すことはできません見つけることができます

を未定義に設定しますが、設定しません。 編集:

Assertion Failed: Cannot delegate set('partyName', aaa) to the 'content' property of object proxy <DS.PromiseObject:ember323>: its 'content' is undefined. 

: 今すぐオンラインいくつかの例を見た後、私は今、私が手にいくつかのモデル

import Ember from 'ember'; 
export default Ember.Controller.extend({ 
    actions: { 
    save() { 
     console.log("yes controller"); 
     let client = this.model.client; 
     let person= this.model.person; 
     let residentialAddress = this.model.client.residentialAddress; 
     client.save().then(() => { 
     person.save(); 
     residentialAddress.save(); 
     this.transitionToRoute('message', {queryParams: {message: 'created'}}); 
     }); 
    } 
    } 
}); 

を初期化するために、私のコントローラを変えて、私の

routes/client/create.js 
    export default Ember.Route.extend({ 
     model() { 
     return Ember.RSVP.hash({ 

      client: this.get('store').createRecord('client' , 
      { 
       person: 'person', residentialAddress: 'address' 
      }), 
      //) 

      party: this.get('store').createRecord('person',{ 
      client: ' 

client' 
      }), 
      residentialAddress : this.get('store').createRecord('address') 

      } 
     ); 
     } 
    }); 

へのルートを作成する変更同じことを言う別の方法です。私は、ルート内のモデルを正しく作成していないと思います。

答えて

0

モデルを正常に作成していますが、正しく関連付けられていません。

let person = this.get('store').createRecord('person'); 
let address = this.get('store').createRecord('address'); 
return this.get('store').createRecord('client', { person: person, address: address); 

// Or the same thing but use shorthand syntax to assign person and address 
let person = this.get('store').createRecord('person'); 
let address = this.get('store').createRecord('address'); 
return this.get('store').createRecord('client', { person, address); 

次に、あなたのテンプレートにちょうどあなたのコンポーネントにclientを渡す

{{client-form client=model ...}} 

そしてなど、あなたのテンプレートの使用client.person

:何がしたいことはもっと似ている

'client': this.get('store').createRecord('client' , { 
    person: 'person', // Here you are setting client.person to the string 'person', not to the person model 
    address: 'address' 
}), 

まだモデルフックからハッシュを返す場合は、d o:

let person = this.get('store').createRecord('person'); 
let address = this.get('store').createRecord('address'); 
return Ember.RSVP.hash({ 
    client: this.get('store').createRecord('client', { person: person, address: address), 
    person: person, 
    address: address 
}); 
関連する問題