Sto cercando di capire meglio this Firebase authenticator for Ember SimpleAuth:Cosa succede quando si associa "questo" a una funzione di Brace?
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
login: function() {
this.get('session').authenticate('authenticator:firebase', {
'email': this.get('email'),
'password': this.get('password')
}).then(function() {
this.transitionToRoute('index');
}.bind(this));
},
logout: function() {
this.get('session').invalidate().then(function() {
this.transitionToRoute('login');
}.bind(this));
}
}
});
qualcuno dovrebbe spiegare che cosa ".bind (questo)" sta facendo e come esattamente si legano sta lavorando in questo caso particolare?
Edit: Dopo un po 'di riflessione e di ricerca, ecco la mia proposta di spiegazione di ciò che può accadere:
La sezione ".then" del codice non hanno accesso al contesto originale di 'questo'. ".bind (this)" imposta il valore di "this" (che in questo caso è l'oggetto controller corrente) su "this" all'interno della funzione ".then".
Ciò può essere dimostrato dal fatto che se la sezione ".bind (this)" viene rimossa, la sezione "transitionTo" del codice non funziona.
D'altra parte, se scriviamo il codice come segue, non abbiamo bisogno di usare ".bind (questo)":
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
login: function() {
var _this = this;
this.get('session').authenticate('authenticator:firebase', {
'email': this.get('email'),
'password': this.get('password')
}).then(function() {
_this.transitionToRoute('index');
});
},
logout: function() {
var _this = this;
this.get('session').invalidate().then(function() {
_this.transitionToRoute('login');
});
}
}
});
Pensieri?
Sì, dovresti aggiungere la parte inferiore del tuo post come risposta (è corretto rispondere alla tua stessa domanda). – steveax