0

ember.jsember-authgemを使用している次のコントローラーがあります。このコントローラーは機能しますloginErrorが、サインインするたびにプロパティを設定します。

BaseApp.SignInController = Auth.SignInController.extend({
  email: null,
  password: null,
  loginError: false,
  signIn: function() {
    this.registerRedirect();
    Auth.signIn({
      email: this.get('email'),
      password: this.get('password')
    });
    this.set('loginError', true); // Sets correctly but each time
    Auth.on('signInError', function() {
      console.log("This is a signin error");
    });
  }
});

明らかに、私がやりたいことは、次のように呼び出される関数の内部に設定loginErrorされています。trueAuth.on

BaseApp.SignInController = Auth.SignInController.extend({
  email: null,
  password: null,
  loginError: false,
  signIn: function() {
    this.registerRedirect();
    Auth.signIn({
      email: this.get('email'),
      password: this.get('password')
    });
    Auth.on('signInError', function() {
      this.set('loginError', true); // Doesn't set the controller's property
      console.log("This is a signin error");
    });
  }
});

ただし、コールバック内のスコープが異なるため、これは明らかに機能しません。たぶん私は非常に基本的なものが欠けています。どうすればそれを機能させることができますか?

4

1 に答える 1

3

コンテキスト (つまりthis) は、メソッドに渡す無名関数内とonコントローラー内では異なります。コンテキストをクロージャー内の別の変数に保存することで、これを回避できます。

var self = this;
Auth.on('signInError', function() {
  self.set('loginError', true); // Should now set the controller's property
  console.log("This is a signin error");
});
于 2013-03-14T21:28:16.740 に答える