Welcome

首页 / 脚本样式 / ExtJS / ExtJs中使用TaskRunner和DelayedTask如何传参数到run()方法

ExtJs中使用TaskRunner和DelayedTask如何传参数到run()方法2011-10-29 BlogJava 隔叶黄莺在 ExtJs 中支持多线程的类有 Ext.util.TaskRunner 和 Ext.util.DelayedTask。TaskRunner 提供 了多线程的定时服务,DelayedTask 允许你延时多久在新建线程中执行一个任务。Ext.TaskMgr 是一个 TaskRunner 实例,在 TaskMgr.js 源码中可以看到最后一行是:

Ext.TaskMgr = new Ext.util.TaskRunner();

实质上不管是 TaskRunner 还是 DelayedTask,它们都是通过 setInterval() 来执行任务的, TaskRunner 能多次重复的执行一个方法,而 DelayedTask 是延时执行完一次任务后就会调用 clearInterval() 来保证只执行一次。所以这里所说如何向任务的 run() 方法传递参数,本质上就是向 setInterval() 中方法传递参数。

我们到 http://extjs.com/deploy/dev/docs/output/Ext.util.TaskRunner.html 看 TaskRunner 的 API,start(Object task) 中 task 参数是一个配置对象,这里关注它的两个属性:

run : Function 定时执行的方法

args : Array 传递给上面 run 方法的参数

来看一个基本使用方法,下面是不带 args 属性参数的使用:

01.Ext.onReady(function(){
02. var runner = new Ext.util.TaskRunner ();
03. runner.start({ //任务被调用的方法
04. run: function(){
05. alert("run() 方法被执行.")
06. },
07. interval: 1000, //一秒执行一次
08. repeat: 5 //重复执行 5 次
09. });
10.});

上面没有向 run() 方法提供参数,那么应该如何向 run() 传入参数,run() 方法此时的原型是怎么 样,又该如何获得传入的参数?办法是:js 函数的固有属性 arguments。看代码:

01.Ext.onReady(function(){
02. var runner = new Ext.util.TaskRunner ();
03. runner.start({ //任务被调用的方法
04. run: function(){ //run 方法原型不变,实际可以去遍历这个 arguments 参数数组
05. alert("run() 方法被执行. 传入参数个数:" + arguments.length + ", 分别是: "
06. + arguments[0] +"," + arguments[1] +"," + arguments[2]);
07. return false; //不返回 false,run() 方法 会被永无止境的调用
08. },
09. args:[100,200,300],
10. interval: 1000, //一秒执行一次,本例中 run() 只在 1 秒后调用一次
11. repeat: 2 //重复执行 2 次, 这个参数已不再启作用了
12. });
13.});