在项目中,我碰到了这样一个问题,以前是的问题描述和解决过程。
点击按钮,弹出确认对话框,YES则回调函数处理,回调函数需要使用到一个对象——他的类型是Ext.grid.GridEdit:
handler : function() {
Ext.MessageBox.confirm('提示', '确实要保存修改记录?', doSave);
}
Ext.MessageBox.confirm('提示', '确实要保存修改记录?', doSave);
}
开始将doSave方法写在function里面,grid可以作为一个方法中的全局变量,可以被doSave使用,但这显然是不对的,FireDebug下调试,也提示找不到doSave方法。可能是方法中不能有另一个方法的定义吧。
于是,我这样更改了一下:
handler : function() {
Ext.MessageBox.confirm('提示', '确实要保存修改记录?', doSave(grid));
}
Ext.MessageBox.confirm('提示', '确实要保存修改记录?', doSave(grid));
}
bug不存在了,但是新的问题出现了,我发现,不等我点YES或NO的按钮,doSave方法已经执行了。回头一想,这样写恐怕就是直接的函数调用,而非回调函数。
那么如何在回调函数时,传递参数呢?google了一下,一个朋友的blog给了我一个启发,他的做法是:
handler : function() {
Ext.MessageBox.confirm('提示', '确实要保存修改记录?', function() {doSave(grid)});
}
Ext.MessageBox.confirm('提示', '确实要保存修改记录?', function() {doSave(grid)});
}
问题解决了,我在function外,写了doSave的定义,断点查看gird对象,它是一个完整的GridEdit。