`
wls981
  • 浏览: 136090 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

Ext2.2中TaskMgr的一个小BUG

EXT 
阅读更多

用的是ext2.2版,执行以下代码:

 

Ext.TaskMgr.start({
	run: function(args) {
		alert(args);
	},
	args: ['111'],
	interval: 100,
	repeat: 1
});

 

以上代码执行后任务函数会一直执行,而本意是只执行一次。查看ext的源发现是个BUG,以下是ext中用于执行任务的源码:

 

        var runTasks = function(){
        if(removeQueue.length > 0){
            for(var i = 0, len = removeQueue.length; i < len; i++){
                tasks.remove(removeQueue[i]);
            }
            removeQueue = [];
            if(tasks.length < 1){
                stopThread();
                return;
            }
        }
        var now = new Date().getTime();
        for(var i = 0, len = tasks.length; i < len; ++i){
            var t = tasks[i];
            var itime = now - t.taskRunTime;
            if(t.interval <= itime){
                var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
                t.taskRunTime = now;
                if(rt === false || t.taskRunCount === t.repeat){
                    removeTask(t);
                    return;
                }
            }
            if(t.duration && t.duration <= (now - t.taskStartTime)){
                removeTask(t);
            }
        }
    };

var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]); 

上面这句其中红色部份因为是'或'的关系,所以当任务配置中有 args 配置时,则任务的执行次数没有得到增加,也就导致任务停止不下来。

 

解决的办法是不要使用args,使用 scope 配置:

 

Ext.TaskMgr.start({
	run: function() {
		alert(this.aaa);
	},
	//args: ['111'],
	scope: {aaa: '111'},
	interval: 100,
	repeat: 1
});
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics