2016-04-02 11 views
0

Ich habe ein Problem mit Formularen in Glut, die this.getProperties innerhalb des Controllers gibt undefined für alle Eigenschaften zurück. Hier ist mein Code:Ember-Controller getProperties gibt "undefined" zurück

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

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

import Ember from 'ember'; 

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

}); 

Wenn Last der Seite Alle Eingaben zeigen den korrekten Wert an, aber beim Senden des Formulars sind alle Eigenschaften null. Ich brauche ein paar Stunden hier und ich sehe nicht, warum es nicht funktioniert.

Antwort

1

Ich vermute, das Problem ist, dass Ihr Controller keine Eigenschaften hat, wie Sie es erwarten. Von Ihrem Controller-Code sehe ich, dass es keine gibt. Der Einstellungs-Controller hat nur einen Aktionshandler definiert (saveSettings()), sonst nichts. Das Formular wird korrekt mit Daten gefüllt, da es sich um die Modelldaten handelt (d. H. {{input .... value=model.email}}), nicht die Steuerungsdaten.

Ich werde nicht beschreiben, wie man mit Controller-Eigenschaften arbeitet, weil ich wette, was Sie tun möchten, ist Ihren Benutzer zu aktualisieren. Es ist eine Zwei-Wege-Bindung, daher ist keine explizite Eigenschaftsmodifikation notwendig. Ich denke, dass dieser Code die Arbeit tun sollte:

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

Danke Pavol! Klappt wunderbar. Sehr hilfreich! Endlich habe ich verstanden, wie Controller und Templates funktionieren. – jos

Verwandte Themen