Domanda

Sto cercando di impostare una variabile booleana ogni volta che l'utente è registrato.

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

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

Tuttavia, su this.set() ottengo:

.

Uncaught TypeError: indefinito non è una funzione

Qualche idea?

Ho pensato che il miglior posto per gestire la sessione utente sia nel App.ApplicationRoute poiché è la radice di tutto.Questo causa un problema?

Aggiornato: Con il feedback qui è il codice corrente / 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);
      }
    });
  }
})
.

Così ho lasciato fuori il mio codice FireBase in precedenza perché non lo pensavo davvero pertinente, ma per il gusto di rintracciare il problema, lo aggiungerò in.

È stato utile?

Soluzione

Il motivo ha a che fare con il

this
.

Essere erroneamente impostato nel tuo firebasesimplelogin.La funzione che si utilizza all'interno del costruttore deve essere passata in un riferimento a "questo" del contesto esterno.Il modo più semplice per farlo è cambiando il codice della funzione a questo:

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

Altri suggerimenti

Prima cosa è il primo :)

Come affermato al ember.js Documenation : .

Nota: se si esegue l'override init per una classe quadro come Ember.View o Ember.arrayController, Assicurati di chiamare questo._Super () nella Dichiarazione init !Se non lo fai, Ember potrebbe non avere un'opportunità per fare un importante lavoro di installazione e vedrai un comportamento strano nella tua applicazione.

Secondo, la tua variabile loggedIn non è dichiarata né istantaneata e quindi nulla come il tuo error ma immagino che tu abbia appena strappato un codice del tuo progetto per giocherellare un rapido esempio, quindi se fai:

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

Tutto dovrebbe funzionare come previsto :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top