Вам необходимо «вернуть», чтобы эффективно закрыть uiInstance, return
необходимо для отражения изменений, внесенных вами в Ui, включая его закрытие.
попробовать
return uiInstance.close();
EDIT следующий комментарий:
экземпляры 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();
}
Существует также хитрый обходной путь, который может «имитировать» действия пользователя. Он использует свойство некоторых виджетов для запуска функции обработчика при изменении значения. В приведенном ниже примере я использовал checkBox для запуска процесса
Он закроет диалог, когда будет выполнена задача 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(); DoStuff(); CloseDialog(); } что нужно закрытьDialog(), чтобы выглядеть? И мне нужно также изменить displayDialog()? –
см. Править пожалуйста –
Спасибо =)! Мне это нужно, потому что задача «doStuff» занимает довольно много времени, чтобы закончить (> 1 минута), и я хотел, чтобы пользователь знал, что (или что) он все еще работает –