我有以下控制器使用ember.js
和ember-auth
gem。此控制器有效,但每次登录时都会设置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
调用的函数中将true
设置为Auth.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");
});
}
});
但这显然不起作用,因为回调内的范围是不同的。也许我错过了一些非常基本的东西。我怎样才能使它发挥作用?
答案 0 :(得分: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");
});