ExtJs 中使用 TaskRunner 和 DelayedTask 如何传参数到 run() 方法
2009-09-24 00:00:00 来源:WEB开发网上面是 TaskRunner 的 runTasks 方法,当有了 args 参数,t.taskRunCount 永远都是 0,不会到达 t.taskRunCount === t.repeat,所以只能让 run() 方法返回 fasle 来终止,即满足 rt === false 时就会 removeTask(t),当然你也可以设定一个 duration 期限。
想不太明白,为什么 ExtJs 不能让 args 和 repeat 同时有效,即让 ++t.taskRunCount 总是能得到执行。如果指定了 args 即传它,否则把当前被调用次数传递给 run() 方法。
前面看到 run() 方法是通过 Function.apply(obj: Object, args: Array) 来调用的,它是通过数组来传递参数,方法中用 arguments 取得。JS 中另一调用函数的方法是 Function.call(obj: Object, arg1, arg2, arg3,...),相当于变长参数的形式。
01.Ext.onReady(function(){
02. var runner = new Ext.util.TaskRunner();
03. runner.start({ //任务被调用的方法
04. run: function(arg){ //run 方法原型有变,有一个参数
05. //同样能用 arguments 取到 args 中的所有元素
06. alert('run() 方法被执行. 传入参数个数:' + arguments.length + ", 分别是:"
07. + arguments[0] +"," + arguments[1] +"," + arguments[2] +
08. ", arg 的值是:" + arg); //arg 对应 args 中的第一个元素
09. return false; //不返回 false,run() 方法会被永无止境的调用
10. },
11. args:[100,200,300],
12. interval: 1000, //一秒执行一次,本例中 run() 只在 1 秒后调用一次
13. repeat: 2 //重复执行 2 次, 这个参数已不再启作用了
14. });
15.});
关于 DelayedTask 传参数的用法也是同理,而且它还不存在 repeat 和 args 的不和谐之音。同样可有两种方式,arguments 数组中取和 run() 方法加个 arg 参数取得 args 的第一个元素。直接看代码:
1.var delayedTask = new Ext.util.DelayedTask();//你也可以在初始化时传入 fn,scope,args
2.delayedTask.delay(1000,function(arg){//没有 arg 参数也是能用 arguments 的
3. //同样能用 arguments 取到 args 中的所有元素
4. alert('run() 方法被执行. 传入参数个数:' + arguments.length + ", 分别是:"
5. + arguments[0] +"," + arguments[1] +"," + arguments[2] +
6. ", arg 的值是:" + arg); //arg 对应 args 中的第一个元素
7.
8.},this,[100,200,300]);
从 DelayedTask 中可看到它也是通过 apply 来调用 run() 方法的,fn.apply(scope, args || []); 没有指定参数则传空参。
Tags:ExtJs 使用 TaskRunner
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接