在項目中,我碰到了這樣一個問題,以前是的問題描述和解決過程。
點擊按鈕,彈出確認對話框,YES則回調函數處理,回調函數需要使用到一個對象——他的類型是Ext.grid.GridEdit:
handler : function() {
Ext.MessageBox.confirm(''提示'', ''確實要保存修改記錄?'', DOSave);
}
開始將doSave方法寫在function裡面,grid可以作為一個方法中的全局變量,可以被doSave使用,但這顯然是不對的,FireDebug下調試,也提示找不到DOSave方法。可能是方法中不能有另一個方法的定義吧。
於是,我這樣更改了一下:
handler : function() {
Ext.MessageBox.confirm(''提示'', ''確實要保存修改記錄?'', DOSave(grid));
}
bug不存在了,但是新的問題出現了,我發現,不等我點YES或NO的按鈕,DOSave方法已經執行了。回頭一想,這樣寫恐怕就是直接的函數調用,而非回調函數。
那麼如何在回調函數時,傳遞參數呢?google了一下,一個朋友的blog給了我一個啟發,他的做法是:
handler : function() {
Ext.MessageBox.confirm(''提示'', ''確實要保存修改記錄?'', function() {DOSave(grid)});
} 問題解決了,我在function外,寫了DOSave的定義,斷點查看gird對象,它是一個完整的GridEdit。