ExtJS setTimeout循环函数不起作用(丢失范围)Ext.bind

时间:2014-07-09 01:29:06

标签: extjs extjs4 extjs4.1 extjs4.2 extjs-mvc

我有一个ExtJS 4.2.1 Controller我使用setTimeout在1秒后触发一个函数:

onPrint: function () {
        var me = this;

        // start some stuff here...

        // end some stuff here...

        // wait 1 second and call checkDownloadComplete function
        setTimeout(me.checkDownloadComplete, 1000);

    },
    checkDownloadComplete: function () {
        var me = this;

        // validate stuff here...
        if (something == "true") {

            return;
        }

        // first approach but didn't work (maybe because the scope)
        setTimeout(me.checkDownloadComplete, 1000);

        // sencond approach but didn't work
        Ext.bind(function () {
            setTimeout(checkDownloadComplete, 1000)
        }, me)


    },

我的第一次尝试是使用:

  

setTimeout(me.checkDownloadComplete,1000);但这不起作用

我的第二次尝试是评论最后一行,并使用Ext.bind:

  

Ext.bind(funciton(){setTimeout(checkDownloadComplete,1000)},me);

任何线索我做错了什么?因为这些都不能再次调用它自己的功能。

由于

更新

我也试过这个但没有成功:

setTimeout(Ext.bind(checkDownloadComplete,me), 1000);

1 个答案:

答案 0 :(得分:1)

解决方案是将setTimeout次调用更改为:

setTimeout(Ext.bind(me.checkDownloadComplete, me), 200);

问题是,在setTimeout的第一次调用中,checkDownloadComplete范围已更改为setTimeout范围而非控制器范围,因此更改两者都解决了问题 -