您必須「返回」纔能有效關閉uiInstance,需要return
才能反映您對用戶界面所做的任何更改,包括關閉它。
嘗試
return uiInstance.close();
編輯您的評論如下:
了UiApp情況下,只能從一個處理功能被關閉,我認爲這是你如何使用它(但我可能錯了)。
下面是一個小的代碼示例:
function displayDialog() {
var uiInstance = UiApp.createApplication()
.setWidth(130)
.setHeight(130);
uiInstance.add(uiInstance.createLabel("foo"));
var handler = uiInstance.createServerHandler('closeDialog');
uiInstance.add(uiInstance.createButton('close',handler));
SpreadsheetApp.getUi().showModalDialog(uiInstance, 'bar');
}
function closeDialog(){
return UiApp.getActiveApplication().close();
}
還有一個棘手的變通方法,可以在「模擬」的用戶動作。它使用某些小部件的屬性在更改值時觸發處理函數。在下面的示例中,我使用了一個複選框來啓動過程
當doStuf中的任務完成時,它將關閉對話框。
function displayDialog() {
var uiInstance = UiApp.createApplication()
.setWidth(130)
.setHeight(130);
uiInstance.add(uiInstance.createLabel("foo"));
var handler = uiInstance.createServerHandler('doStuf');
var chk = uiInstance.createCheckBox().setValue(true).setId('chk').setVisible(false);
chk.addValueChangeHandler(handler);
uiInstance.add(chk);
chk.setValue(false,true)// This actually calls the doStuf function (using the handler)
SpreadsheetApp.getUi().showModalDialog(uiInstance, 'bar');
}
function doStuf(){
Utilities.sleep(5000);// replace with something useful ...
return UiApp.getActiveApplication().close();
}
也許我只是不明白你的意思,我仍然無法使其工作;如果我有一個像{displayDialog();做東西(); closeDialog(); }什麼需要closeDialog()看起來像?我還必須改變displayDialog()嗎? – 2014-10-12 09:47:23
請參閱編輯 – 2014-10-12 11:01:48
謝謝=)!我需要這個,因爲「doStuff」任務需要一段時間才能完成(> 1分鐘),並且我希望用戶知道它是否還在工作 – 2014-10-13 11:16:21