Pergunta

Eu estou tentando definir uma variável booleana sempre que o usuário está conectado.

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

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

No entanto, no this.set() Eu recebo:

Não Identificada TypeError:indefinido não é uma função

Qualquer idéias?

Eu percebi que o melhor lugar para lidar com a sessão do usuário está no App.ApplicationRoute desde a sua raiz de tudo.Isso causa um problema?

ATUALIZADO:Com os comentários aqui é o actual código 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);
      }
    });
  }
})

Então eu deixei de fora o meu Firebase código anteriormente, porque eu não acho mesmo que relevantes, mas por causa de acompanhar o problema, eu vou adicioná-lo.

Foi útil?

Solução

A razão tem a ver com o

this

sendo erroneamente definido no seu firebasesimplelogin.A função que você está usando dentro do construtor deve ser passado em uma referência a 'este' do exterior contexto.A maneira mais fácil de fazer isso é alterar o código da função a este:

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

Outras dicas

Primeira coisa primeira :)

Como indicado no Ember.js documenation:

NOTA:Se você substituir init para uma estrutura de classe como Brasa.Exibir ou Brasa.ArrayController, certifique-se de chamar a esta._super() na sua declaração de init!Se não, Um não pode ter uma oportunidade para fazer o importante trabalho de configuração, e você verá um comportamento estranho em seu aplicativo.

Segundo, o seu loggedIn variável não é declarada, nem instanciado e, portanto, nulo, bem como o seu error mas eu acho que você só rasgou algum código do seu projeto para violino em conjunto um exemplo rápido, por isso, se você fizer:

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

tudo deve funcionar como o esperado :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top