2016-04-02 16 views
0

Kümedeki formlarla ilgili bir sorun yaşıyorum, this.getProperties denetleyicide tüm özellikler için undefined döndürüyor.ember controller getProperties "undefined" döndürüyor

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 (kontrolör)

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 (rota)

import Ember from 'ember'; 

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

}); 

yük sayfa İşte benim kodudur tüm girdiler doğru değeri gösterir, ancak formu gönderirken tüm özellikler geçersizdir. Bir kaç saatimi burda taktım ve neden çalışmadığını anlamıyorum.

cevap

1

Sorun şu ki, kontrol cihazınızın sahip olduğunuz gibi özelliklere sahip olmaması. Kontrolörün kodundan gördüğüm hiç yok. Ayarlar kontrolöründe sadece bir eylem işleyicisi tanımlanmış (saveSettings()), başka bir şey yok. Form, verilerle doğru bir şekilde doldurulur, çünkü kontrolör verileri değil, model verileridir (yani, {{input .... value=model.email}}).

Denetleyici özellikleriyle nasıl çalışacağımı açıklamıyorum çünkü yapacağınız şey, kullanıcılarınızı güncellemektir. İki yönlü bir bağlantıdır, bu nedenle açık özellik değişikliği gerekli değildir. Bence bu kod çalışmayı yapmalı:

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

Teşekkürler Pavol! ÇALIŞIYOR bir cazibe gibi. Çok yararlı! Sonunda denetleyicilerin ve şablonların nasıl çalıştığını anladım. – jos

İlgili konular