2013-12-17 48 views
0

我有一個按鈕,當按下時,調用一個可以修改多達9個CalendarEvent的功能。由於對CalendarApp的調用速度很慢,並且執行更改爲9個事件需要大約20-30秒,因此我試圖實施類似「更新」消息的操作,以便UI的用戶知道更改實際上正在進行製作。模擬「更新」UiApp中的彈出菜單/標籤

我無法弄清楚如何在我的功能saveChanges在後臺運行時更新UI。我知道有一種方法可以做到這一點,但我無法弄清楚。

爲了使彈出窗口或標籤對用戶可見,需要返回UI實例。但是,如果我返回UI實例,我的函數執行完全停止。我該如何解決這個問題?

回答

2

What happens when I "sleep" in GAS ? (execution time limit workaround)背後的動機與你的不同,但問題中的代碼會做你正在尋找的東西。

您需要將其調整爲您正在使用的特定用戶界面(不要說您是否在容器綁定的腳本中),但基本思路是設置您的用戶界面中有一個(隱藏)複選框,並附帶一個處理程序。每當複選框狀態發生變化時,該處理程序都會被調用,並且它是執行真正的工作的處理程序 - 修改日曆事件。

但是,如果隱藏複選框,那麼處理程序將如何被調用?詭計!最初的UI應用程序通過使用setValue()首次「點擊」複選框來解決問題。之後,處理程序在每個工作週期結束時「點擊」自己。

同樣在工作週期結束時,處理程序用一些新值更新UI中的元素(它通過getElementById()獲取句柄)。這就是你如何解決「靜態」UI的問題。在Serge的例子中,他正在運行一個時鐘顯示器,但是您可以輕鬆地呈現%完整的值或特定的狀態消息。

+0

這看起來比我想要的要複雜一些,但絕對有效,而且最終的解決方案是:) –

1

看看客戶端處理程序。 如果您已經添加了一個服務器處理程序(也許會有一個按鈕),還可以添加一個客戶端單擊處理程序,該處理程序只需將「更新...」設置爲標籤即可。您的服務器處理程序在完成時也將其設置爲「ok」。爲了更好看,你可以改爲顯示一個動畫進度gif,並將其從服務器處理程序中隱藏起來。

+0

雖然你的回答完全符合我的要求,但Mogsdad的回答實際上是一個更好的選擇 - 這樣我可以用一條消息更新UI,例如「處理9個事件中的X個事件」。 –

+0

是的,它更完整,因爲你可以取得進展,我也是這樣做的,但是你不會獲得中立的首要地位,因爲它需要服務器往返。如果您在用戶單擊按鈕時使用客戶端處理程序,那麼它將處於中間狀態。結合兩者。 –

+0

是的,你說得對。我添加了客戶端處理程序,現在我正在對我的事件處理進行修改以結合Mogsdad的答案。感謝你們兩位! –