当我想在控制器操作中从服务器获取帐户时,例如:
account: false,
actions: {
// When the oAuth popup returns this method will be called
fetchUser: function(id)
{
// Get the account from the server
this.store.find('account', id).then(function(account)
{
this.set('account', account);
}, function(error)
{
console.log('error', error);
});
},
}
它会抛出错误,因为this.set('account', account)
行上的“this”不再是控制器。如何在此承诺回调中设置控制器上的“帐户”?
答案 0 :(得分:6)
account: false,
actions: {
// When the oAuth popup returns this method will be called
fetchUser: function(id)
{
// Get the account from the server
this.store.find('account', id).then(function(account)
{
this.set('account', account);
}.bind(this), function(error)
{
console.log('error', error);
});
},
}
修正了它!添加.bind(this):-)
答案 1 :(得分:1)
这不是EmberJS这样做的,这只是Javascript范围的工作方式。
this
关键字的范围是使用它的函数。
这是一个可以帮助您理解这一点的链接。
http://javascriptplayground.com/blog/2012/04/javascript-variable-scope-this/
我还建议在Javascript上观看Crockford的视频,他解释了这个以及你正在尝试做的事情的解决方法。
这是他视频的链接..
答案 2 :(得分:0)
一种解决方案是使用典型的
var self = this;
在输入更改this
范围并在函数中使用self
而不是this
的函数之前。
self.set('account', account);