2016-08-05 15 views
0

Ich habe ein sehr einfaches Autorenmodell mit einem Feld, Name. Ich habe ein Formular in meiner Autoren/neuen Vorlage, das die Aktion aufruft, wenn sie gesendet wird.ember - Fehler beim Speichern eines neuen Modells

<form {{action "save" on="submit"}}> 
    {{input value=model.name placeholder="Name"}}<br> 
    <input type="submit" value="Save"> 

</form> 

In meiner Route für Autoren/neu definiere ich das Modell einen Datensatz für Autor zu erstellen, definiert dann die Aktion speichern, dieses Modell zu speichern.

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
     return this.store.createRecord('author'); 
    }, 
    actions: { 
     save() { 
      this.get('model').save(); 
     } 
    } 
}); 

Wenn ich jedoch auf die Schaltfläche zum Speichern klicken, erhalte ich den folgenden Fehler in meiner Konsole. Uncaught TypeError: this.get(...).save is not a function. Kann mir jemand helfen, was ich falsch mache?

+0

this.get (‚Modell‘) liefert Funktionsmodell in Route definiert ... eine mögliche Lösungen wäre Ihre Funktion es funktionieren wird an den Controller speichern bewegen. – kumkanillam

+0

Holen Sie das Modell vom Controller statt von der Route. Um Controller zu erhalten, verwende var cont = this.controllerFor ('authors.new'); cont.get ('Modell'). save(); – kumkanillam

+0

Sie können das Modell in Ihrer Route mithilfe von [modelFor] (http://emberjs.com/api/classes/Ember.Route.html#method_modelFor) abrufen. –

Antwort

0

einfachste und sauberste wäre das Modell auf Ihre Sparfunktion zu übergeben:

<form {{action "save" on="submit" model}}>

save(model) { model.save(); }

0

versuchen modelFor für verschachtelte Routen nur zu verwenden.

Da Sie nur den Pfad model in Ihrer Route implementieren, wird ember alle anderen Hooks mit der Standardimplementierung anwenden.

Es setzt, was von dem Modell-Hook als model auf Ihrem controller zurückgegeben wird.

Also, was Sie hier tun können ist:

let newAuthor = this.get('controller.model'); 
    newAuthor.save().then(() => { return console.log('it saved!') }); 
Verwandte Themen