Frage

Ich versuche, eine boolesche Variable festzulegen, wann immer der Benutzer angemeldet ist.

App.ApplicationRoute = Ember.Route.extend({
  isLoggedIn: false,

  init: function() {
      if (loggedIn) {
        this.set('isLoggedIn', true);
      } else {
        console.log(error)
        this.set('isLoggedIn', false);
      }
    });
  }
});

Allerdings weiter this.set() Ich bekomme:

Nicht erfasster TypeError:undefiniert ist keine Funktion

Irgendwelche Ideen?

Ich dachte mir, dass der beste Ort für die Verwaltung von Benutzersitzungen der ist App.ApplicationRoute denn es ist die Wurzel von allem.Verursacht dies ein Problem?

AKTUALISIERT:Mit Feedback hier ist der aktuelle/vollständige 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);
      }
    });
  }
})

Deshalb habe ich meinen Firebase-Code zuvor weggelassen, weil ich ihn nicht wirklich für relevant hielt, aber um das Problem aufzuspüren, füge ich ihn hinzu.

War es hilfreich?

Lösung

Der Grund hat mit dem zu tun

this

in Ihrem Firebasesimplelogin falsch eingestellt sein.Die Funktion, die Sie im Konstruktor verwenden, muss in einer Referenz auf „this“ des äußeren Kontexts übergeben werden.Der einfachste Weg, dies zu tun, besteht darin, den Code der Funktion wie folgt zu ändern:

function(error, user) {
  if (user) {
    console.log(user)
    this.set('isLoggedIn', true);
  } else {
    console.log(error)
    this.set('isLoggedIn', false);
  }
}.bind(this));

Andere Tipps

Das wichtigste zuerst :)

Wie am angegeben Ember.js-Dokumentation:

NOTIZ:Wenn Sie init für eine Framework-Klasse wie Ember.View oder Ember.ArrayController überschreiben, Rufen Sie unbedingt this._super() in Ihrer Init-Deklaration auf!Wenn Sie dies nicht tun, hat Ember möglicherweise keine Gelegenheit, wichtige Einrichtungsarbeiten durchzuführen, und Sie werden ein seltsames Verhalten in Ihrer Anwendung feststellen.

Zweitens, Ihr loggedIn Variable ist weder deklariert noch instanziiert und daher ebenso null wie Ihre error Aber ich vermute, Sie haben gerade einen Teil des Codes Ihres Projekts herausgerissen, um ein kurzes Beispiel zusammenzustellen. Wenn Sie das also tun:

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);
      }
    });
  }
});

Alles sollte wie erwartet funktionieren :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top