Pregunta

Estoy intentando establecer una variable booleana cada vez que el usuario inicia sesión.

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

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

Sin embargo, en this.set() Yo obtengo:

Error de tipo no detectado:indefinido no es una función

¿Algunas ideas?

Pensé que el mejor lugar para manejar la sesión del usuario es en el App.ApplicationRoute ya que es la raíz de todo.¿Esto causa algún problema?

ACTUALIZADO:Con comentarios aquí está el código actual/completo.

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

Así que omití mi código de Firebase anteriormente porque realmente no pensé que fuera relevante, pero para rastrear el problema, lo agregaré.

¿Fue útil?

Solución

La razón tiene que ver con la

this

estar configurado incorrectamente en su inicio de sesión simple de firebase.La función que está utilizando dentro del constructor debe pasarse en una referencia a "esto" del contexto externo.La forma más sencilla de hacerlo es cambiando el código de la función a este:

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

Otros consejos

Lo primero es lo primero :)

Como se dijo en el Documentación de Ember.js:

NOTA:Si anula init para una clase de marco como Ember.View o Ember.ArrayController, asegúrese de llamar a this._super() en su declaración de inicio!Si no lo hace, es posible que Ember no tenga la oportunidad de realizar un trabajo de configuración importante y verá un comportamiento extraño en su aplicación.

En segundo lugar, tu loggedIn La variable no está declarada ni instanciada y por lo tanto es nula al igual que su error pero supongo que acabas de extraer algo de código de tu proyecto para crear un ejemplo rápido, así que si lo haces:

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

todo debería funcionar como se esperaba :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top