2016-04-02 3 views
0

emberでフォームに問題が発生した場合、コントローラ内のthis.getPropertiesはすべてのプロパティに対してundefinedを返します。ここに私のコードは次のとおりです。emberコントローラのgetPropertiesが "undefined"を返す

settings.hbs:

<form {{action 'saveSettings' on='submit'}}> 

<label for="email">Email</label> 
<p> 
{{input id='email' placeholder='Enter Email' value=model.email}} 
</p> 
<label for="name">Name</label> 

<p> 
{{input id='name' placeholder='Enter Name' value=model.name}} 
</p> 
<label for="surname">Surname</label> 

<p> 
{{input id='surname' placeholder='Enter Surname' value=model.surname}} 
</p> 
<label for="skype">Skype</label> 

<p> 
{{input id='skype' placeholder='Enter Skype' value=model.skype}} 
</p> 
<label for="phone">Phone</label> 

<p> 
{{input id='phone' placeholder='Enter Phone' value=model.phone}} 
</p> 
<label for="city">City</label> 

<p> 
{{input id='city' placeholder='Enter City' value=model.city}} 
</p> 

<label for="country">Country</label> 

<p> 
{{input id='country' placeholder='Enter Country' value=model.country}} 
</p> 

<button type="submit">Save Settings</button> 
</form> 

settings.js(コントローラ)

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    actions: { 
    saveSettings() { 

     let { 
     email, name, surname, skype, phone, city, country 
     } = this.getProperties('email', 'name', 'surname', 'skype', 
     'phone', 
     'city', 'country'); 

     var user = this.get('model'); 
     user.set('email', email); 
     user.set(
     'name', name); 
     user.set('surname', surname); 
     user.set('skype', 
     skype); 
     user.set('phone', phone); 
     user.set('city', city); 
     user 
     .set('country', country); 

     user.save(); 
    } 
    } 

}); 

settings.js(ルート)

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return this.store.find('user', 'me'); 
    } 

}); 

ページをロードするとすべての入力が正しい値を示しますが、フォームをサブミットすると、すべてのプロパティーがNULLになります。私はここで数時間かかるので、なぜ動作していないのかわかりません。

答えて

1

あなたのコントローラーには期待しているようなプロパティはありません。あなたのコントローラのコードから、私は誰も見ていない。設定コントローラにはアクションハンドラが1つだけ定義されています(saveSettings())。フォームには、コントローラデータではなくモデルデータ({{input .... value=model.email}})なので、データが正しく入力されています。

私はあなたのやりたいことがあなたのユーザーを更新することだと考えているので、コントローラのプロパティを操作する方法については説明しません。これは双方向バインディングなので、明示的なプロパティの変更は必要ありません。私はこのコードは仕事をする必要があります:

export default Ember.Controller.extend({ 

    actions: { 
    saveSettings() { 
     var user = this.get('model'); 

     // here your user should already have updated values, no need to set them explicitly 

     // update the user also on backend 
     user.save(); 
    } 
    } 

}); 
+0

ありがとうPavol!魅力のように動作します。非常に役立ちます!最後に、コントローラとテンプレートの仕組みを理解しました。 – jos

関連する問題