讀Ext之六(延遲任務的執行)


Ext.util.DelayedTask類從名字上就可以看出它是延遲任務的執行。即指定時間之后執行任務。

整個類如下:

Ext.util.DelayedTask = function(fn, scope, args){
    var me = this,
    	id,    	
    	call = function(){
    		clearInterval(id);
	        id = null;
	        fn.apply(scope, args || []);
	    };

    me.delay = function(delay, newFn, newScope, newArgs){
        me.cancel();
        fn = newFn || fn;
        scope = newScope || scope;
        args = newArgs || args;
        id = setInterval(call, delay);
    };

    me.cancel = function(){
        if(id){
            clearInterval(id);
            id = null;
        }
    };
};

總體上看寫類方式是采用 構造函數方式 (將字段,方法都掛在內部this上)

當然這里this上沒掛字段,只掛了兩個方法delay和cancel。這里巧妙的使用setInterval和clearInterval而不是setTimeout。

DelayedTask 有三個參數,fn是需延遲執行的函數(必選,但可在delay時指定),scope是該函數執行時的上下文(可選),args是傳遞給該函數的參數(可選)。

delay方法的后三參數與DelayedTask構造器相同,第一個參數是需要延遲的時間數字,為毫秒。示例如下:

function fn(){
	alert('test');
}
var task = new Ext.util.DelayedTask(fn);
task.delay(2000);

即在2秒后執行fn。這是最簡單的示例,復雜的可以指定fn的執行上下文,還可以傳參數。

這個類在 Ext.util.Event 類中私有函數createBuffered,createDelayed用到。而這兩個函數在Ext.util.Event的createListener方法中用到。

 

下一篇的 Ext.util.TaskRunner 將提供更為強大,多任務定時管理功能。

 

DelayedTask.js

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM