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 將提供更為強大,多任務定時管理功能。
