extjs新手求解关于extjs的TaskMgr中run传函数如何传参的问题

桑汤奈伊伏 2016-09-02 10:15:39
有个需求要修改很久以前的工程,前端用的是extjs3.2,现学现卖就开始改了。然后就遇到了这么一个问题。
功能描述:写的是弹出一个窗口,窗口上会有倒计时,倒计时结束后就调用answerPhone方法。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ExtJs</title>
<meta charset="GBK">
<link href="ExtJs/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="ExtJs/ext-base.js"></script>
<script type="text/javascript" src="ExtJs/ext-all-debug-w-comments.js"></script>

</head>
<body>
<div>
<script type="text/javascript">
Ext.MessageBox.show({
title: '倒计时提醒',
msg: '这是一个倒计时',
//buttons: Ext.MessageBox.OK,
buttons:{"ok":"知道了"},
animEl: 'mb9',
closable : false,
width : 300,
progress : true,
progressText: '5秒后将xxx',
animateTarget: 'bt4',
fn: answerPhone
//icon: Ext.get('icons').dom.value
});

var timeLeft = 5;
var countDownTask = {
run:countDownFunc(),
interval:1000
};
function countDownFunc(){
console.log("fuck" + timeLeft);
if(timeLeft <= 0){
Ext.MessageBox.updateProgress(1, "倒计时结束");
Ext.MessageBox.buttons = false;
//简单延迟后关闭窗口
setTimeout(function(){Ext.MessageBox.hide()}, 500);
//终止轮询任务
Ext.TaskMgr.stop(countDownTask);
answerPhone();
}
else{
timeLeft--;//注意在newAgent的源文件的头中重置该值
Ext.MessageBox.updateProgress((5-timeLeft)/5, timeLeft+'秒之后将xxxx');
}
}
Ext.TaskMgr.start(countDownTask);

var answerPhone = function(){
console.log("倒计时后调用的函数。");
};

</script>
</div>
</body>
</html>

这段代码运行是没有问题的,但是当我把
    var countDownTask = {
run:countDownFunc,
interval:1000
};

改为
    var countDownTask = {
run:countDownFunc(),
interval:1000
};

countDownFunc就只会执行一次,然后会报错, Uncaught TypeError: Cannot read property 'apply' of undefined。

一共两个问题:
1.为什么加了括号就只会执行一次,然后报错?
2.那么不能加括号,如果countDownFunc是设计为要传参的函数,但是不能写成run : countDownFunc(xxx)的形式,那我怎么才能实现传参?(实际上不能传参就定义一个全局变量去操作就行了,但是就是想问问)
...全文
141 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧