2016-08-12 2 views
0

ich einen Controller bin mit dem Wert auf einer Dropdown-Menü ausgewählt zu lesen, in Parametern einiger Eingabefelder nehmen und dann den Datensatz speichern. Es erstellt den Datensatz und nimmt die Informationen gut in Anspruch. Mein Problem liegt darin, dass ich am Ende der Aktion versuche, auf eine andere Seite zu wechseln. Ich erhalte die Fehlermeldung: Cannot read property 'transitionToRoute' of undefinedthis.transitionToRoute funktioniert nicht in meinem Controller Ember

ich völlig ratlos bin. Irgendwelche Ideen?

Hier ist mein Controller-Code:

var teamId; 
export default Ember.Controller.extend({ 
    auth: Ember.inject.service(), 
    actions: { 
     onSelectEntityType: function(value) { 
     console.log(value); 
     teamId = value; 
     return value; 
     }, 
     createProcess: function(processName, processDescription) { 
     var currentID = this.get('auth').getCurrentUser(); 
     let team = this.get('store').peekRecord('team', teamId); 
     let user = this.get('store').peekRecord('user', currentID); 
     let process = this.get('store').createRecord('process', { 
      team: team, 
      user: user, 
      name: processName, 
      description: processDescription 
     }); 
     process.save().then(function() { 
     this.transitionToRoute('teams', teamId); 
     }); 
    } 

    } 
}); 

Hier wird die entsprechende Route ist:

export default Ember.Route.extend({ 
    auth: Ember.inject.service(), 
    model: function() { 
     var currentID = this.get('auth').getCurrentUser(); 
     return this.store.find('user', currentID); 
    } 
}); 
+4

'Dies ist in der Callback-Funktion nicht definiert. Es gibt dutzende, wenn nicht Hunderte von Posts hierauf zu SO. Der einfachste Weg, um dieses ist ein Pfeil Funktion, wie in '.then zu verwenden (() => this.transitionToRoute'. Ein weiterer Ansatz ist es, eine' self' Variable an der Spitze der Funktion zu setzen und diese verwenden. –

+0

Eine Korrektur Es gibt wahrscheinlich Tausende, aber um fair zu sein, ist es wahrscheinlich das häufigste Problem, das Leute mit JavaScript haben. – Kingpin2k

+0

Werfen Sie einen Blick auf diese [Antwort] (http://stackoverflow.com/questions/37097598/nesting-functions-in- js/37097783 # 37097783) – ykaragol

Antwort

4

Sie klares Verständnis diese Schlüsselwort in Javascript haben. Das Schlüsselwort hängt nur davon ab, wie die Funktion aufgerufen wurde, nicht wie/wann/wo sie definiert wurde.

function foo() { 
    console.log(this); 
} 

// normal function call 
foo(); // `this` will refer to `window` 

// as object method 
var obj = {bar: foo}; 
obj.bar(); // `this` will refer to `obj` 

// as constructor function 
new foo(); // `this` will refer to an object that inherits from `foo.prototype` 

Werfen Sie einen Blick auf die MDN documentation, um mehr zu erfahren.

Sie können die diese in normaler Variable zwischenspeichern und dann innerhalb des Rückrufs zugreifen.

ECMASCript 6 führte Pfeilfunktionen ein, die lexikalisch definiert sind. Hier wird dies im Umfang genau wie eine normale Variable nachgeschlagen.

process.save().then(() => { 
    this.transitionToRoute('teams', teamId); 
}); 
+0

Vielen Dank für das. Es viel in meinem Verständnis von ** dies half ** –

Verwandte Themen