Вопрос

Я пытаюсь установить логическую переменную всякий раз, когда пользователь входит в систему.

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

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

Однако на this.set() Я получил:

Неперехваченная ошибка типа:неопределенное не является функцией

Есть идеи?

Я решил, что лучшее место для обработки сеанса пользователя — это App.ApplicationRoute поскольку это корень всего.Это вызывает проблемы?

ОБНОВЛЕНО:С отзывами вот текущий/полный код.

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

Поэтому ранее я исключил свой код Firebase, потому что не считал его актуальным, но ради отслеживания проблемы я добавлю его.

Это было полезно?

Решение

Причина связана с

this

неправильно установлен в вашем firebasesimplelogin.Функция, которую вы используете внутри конструктора, должна передаваться со ссылкой на this внешнего контекста.Самый простой способ сделать это — изменить код функции на следующий:

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

Другие советы

Прежде всего :)

Как сказано на Документация Ember.js:

ПРИМЕЧАНИЕ:Если вы переопределите init для класса платформы, такого как Ember.View или Ember.ArrayController, обязательно вызовите this._super() в объявлении инициализации!Если вы этого не сделаете, у Ember может не быть возможности выполнить важную работу по настройке, и вы увидите странное поведение в своем приложении.

Во-вторых, ваш loggedIn переменная не объявлена ​​и не создана и, следовательно, равна нулю, как и ваша error но я думаю, вы просто вытащили часть кода своего проекта, чтобы собрать быстрый пример, поэтому, если вы это сделаете:

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

все должно работать так, как ожидалось :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top