Ember.js - cette.set() dans ApplicationRoute ne fonctionne pas
-
21-12-2019 - |
Question
Je suis en train de mettre une variable booléenne à chaque fois que l'utilisateur est connecté.
App.ApplicationRoute = Ember.Route.extend({
isLoggedIn: false,
init: function() {
if (loggedIn) {
this.set('isLoggedIn', true);
} else {
console.log(error)
this.set('isLoggedIn', false);
}
});
}
});
Cependant, sur this.set()
J'obtiens:
Uncaught TypeError:indéfini n'est pas une fonction
Des idées?
J'ai pensé que la meilleure place pour traiter de session de l'utilisateur est dans l' App.ApplicationRoute
depuis sa la racine de tout.Est-ce à cause d'un problème?
Mise à JOUR:Avec des commentaires ici est l'actuel / plein de code.
App.ApplicationRoute = Ember.Route.extend({
isLoggedIn: false,
init: function() {
this._super();
auth = new FirebaseSimpleLogin(appRef, function(error, user) {
if (user) {
console.log(user)
this.set('isLoggedIn', true);
} else {
console.log(error)
this.set('isLoggedIn', false);
}
});
}
})
J'ai donc quitté mon Firebase code déjà parce que je n'ai pas vraiment pense que c'est pertinent, mais pour l'amour de localiser le problème, je vais l'ajouter dans.
La solution
La raison a à voir avec la
this
à tort défini dans votre firebasesimplelogin.La fonction que vous utilisez à l'intérieur du constructeur doit être passé dans une référence à la " il " de l'extérieur du contexte.La façon la plus simple de le faire est de changer le code de la fonction pour cela:
function(error, user) {
if (user) {
console.log(user)
this.set('isLoggedIn', true);
} else {
console.log(error)
this.set('isLoggedIn', false);
}
}.bind(this));
Autres conseils
Première chose :)
Comme indiqué à la Ember.js documenation:
NOTE:Si vous ne remplacent init pour un cadre de classe comme la Braise.Afficher ou de Braise.ArrayController, assurez-vous d'appeler cette._super() dans votre déclaration init!Si vous ne le faites pas, la Braise ne peut pas avoir l'occasion de faire d'importants travaux d'installation, et vous verrez comportement étrange dans votre application.
Deuxièmement, votre loggedIn
variable n'est pas déclarée, ni instancié et, par conséquent, null ainsi que votre error
mais je suppose que vous venez d'extraire certains code de votre projet à la tripoter un rapide exemple, donc si vous ne:
App.ApplicationRoute = Ember.Route.extend({
isLoggedIn: false,
init: function() {
this._super(); // <-- call `this._super()` here
if (loggedIn) {
this.set('isLoggedIn', true);
} else {
console.log(error)
this.set('isLoggedIn', false);
}
});
}
});
tout devrait fonctionner comme prévu :)