1

当我想在控制器操作中从服务器获取帐户时,例如:

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”this.set('account', account)不再是控制器。我现在如何从这个承诺回调中在控制器上设置“帐户”?

4

3 回答 3

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) :-)

于 2014-04-23T14:27:36.277 回答
1

这不是 EmberJS 这样做的,这只是 Javascript 作用域的工作方式。

关键字的this范围是使用它的函数。

这是一个链接,可以帮助您理解这一点..

http://javascriptplayground.com/blog/2012/04/javascript-variable-scope-this/

我还建议观看 Crockford 的关于 Javascript 的视频,他解释了这一点以及您正在尝试做的事情的解决方法。

这是他的视频链接..

http://yuiblog.com/crockford/

于 2014-04-23T14:03:27.703 回答
0

一种解决方案是使用典型的

var self = this; 

在输入更改范围的函数之前,thisself不是this从函数内部使用。

self.set('account', account);
于 2014-04-23T13:51:33.093 回答