2014-10-11 125 views
1

我有一個腳本中下面的代碼爲谷歌電子表格:uiInstance.close()有沒有效果

var uiInstance; 

function displayDialog() { 
uiInstance = UiApp.createApplication() 
    .setWidth(130) 
    .setHeight(130); 
uiInstance.add(uiInstance.createLabel("foo")); 
SpreadsheetApp.getUi().showModalDialog(uiInstance, 'bar'); 
} 

這個對話的目的是告知腳本計算一些用戶,我想關閉腳本完成其工作後,再次進行對話。如果我使用

uiInstance.close(); 

內部或外部的功能似乎沒有發生雖然;該對話框將保持打開狀態,直到用戶關閉它。有沒有解決我的問題?

回答

1

您必須「返回」纔能有效關閉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(); 
} 
+0

也許我只是不明白你的意思,我仍然無法使其工作;如果我有一個像{displayDialog();做東西(); closeDialog(); }什麼需要closeDialog()看起來像?我還必須改變displayDialog()嗎? – 2014-10-12 09:47:23

+0

請參閱編輯 – 2014-10-12 11:01:48

+0

謝謝=)!我需要這個,因爲「doStuff」任務需要一段時間才能完成(> 1分鐘),並且我希望用戶知道它是否還在工作 – 2014-10-13 11:16:21

0

用途:

uiInstance = uiInstance.close(); 
SpreadsheetApp.getUi().showModalDialog(uiInstance, 'bar');