我想基于id做一个ember js find。
如果存在具有该id的对象,我想对该对象执行一些逻辑。
所以,我基于以下代码这样做:
Cluey.UsersController = Ember.ArrayController.extend({
keypadNum: "",
loginWithPin: function() {
var res;
console.log("Login with pin: " + this.get('loginPin'));
res = Cluey.User.find({
pin: this.get('loginPin')
});
return res.on('didLoad', function() {
var user;
if (res.get('firstObject') != null) {
user = res.objectAt(0);
return this.doLogin(user);
} else {
return alert("User not found with pin " + this.get('loginPin'));
}
});
},
doLogin: function(user) {
//some code
}
});
问题是,一旦我进入res.on('didLoad')回调,我就失去了控制器的范围,因此当我尝试访问this.get(“loginPin”)时,它返回为未定义。
有谁知道如何解决这个问题。
谢谢!
答案 0 :(得分:1)
如果您将对象作为on
事件中的第二个参数传递,它将成为回调中的上下文。
您可以将this
作为didLoad
事件的第二个参数传递:
res.on('didLoad', this, function() {
var user;
if (res.get('firstObject') != null) {
user = res.objectAt(0);
return this.doLogin(user);
} else {
return alert("User not found with pin " + this.get('loginPin'));
}
});
答案 1 :(得分:0)
您可以创建一个名为self
的var并为其指定this
。
Cluey.UsersController = Ember.ArrayController.extend({
keypadNum: "",
var self = this;
loginWithPin: function() {
var res;
console.log("Login with pin: " + this.get('loginPin'));
res = Cluey.User.find({
pin: self.get('loginPin')
});
return res.on('didLoad', function() {
var user;
if (res.get('firstObject') != null) {
user = res.objectAt(0);
return this.doLogin(user);
} else {
return alert("User not found with pin " + this.get('loginPin'));
}
});
},
doLogin: function(user) {
//some code
}
});