EmberJS"这个"在promise(find)回调中改变了

时间:2014-04-23 13:48:36

标签: javascript ember.js promise rsvp-promise

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

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”不再是控制器。如何在此承诺回调中设置控制器上的“帐户”?

3 个答案:

答案 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的视频,他解释了这个以及你正在尝试做的事情的解决方法。

这是他视频的链接..

http://yuiblog.com/crockford/

答案 2 :(得分:0)

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

var self = this; 

在输入更改this范围并在函数中使用self而不是this的函数之前。

self.set('account', account);