EmberJS“这个”,在承诺改变(FIND)回调(EmberJS “this” changed i

2019-10-19 23:55发布

当我想从在控制器动作如服务器获取一笔账:

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)不再是控制器。 我怎么能现在设置“帐户”控制器从这一承诺回调中?

Answer 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);
    }.bind(this), function(error)
    {
        console.log('error', error);
    });

},

}

修复! 加入.bind(本):-)



Answer 2:

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

this关键字的范围是使用它的功能。

这里有一个链接,这将有助于您了解这个..

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

我也建议看JavaScript的克罗克福德的影片,他解释说这和你想做什么解决办法。

下面是他的视频的链接..

http://yuiblog.com/crockford/



Answer 3:

一个解决方案是使用典型

var self = this; 

在进入改变的范围的功能this和使用self ,而不是this从函数中。

self.set('account', account);


文章来源: EmberJS “this” changed in promise (find) callback