2016-12-14 67 views
0

我正在嘗試學習Google Apps腳本,並且在同一個項目中創建了兩個「.gs文件」,每個都有一個實驗onOpen()函數。多個.gs文件中的onOpen()函數

保存,關閉並打開文檔後,只運行onOpen()函數中的一個(Sidebar.gs文件)。

這些是否需要包含在同一個文件中?那麼,我想我知道這是一個解決方法。我想我的問題是爲什麼?

Project: 

Code.gs: 
    function onOpen() { 
    DocumentApp.getUi().createMenu("PACKT").addItem("Greeting","greeting").addToUi(); 
    } 

    function greeting() { 
    var ui = DocumentApp.getUi(); 
    ui.alert("Greeting", "Hello World!", ui.ButtonSet.OK); 
    } 

Sidebar.js: 

    function onOpen() { 
    var htmlOutput = HtmlService.createHtmlOutput('<button onclick="alert(\'Hello World!\');">Click Me</button>').setTitle("My Sidebar"); 
    DocumentApp.getUi().showSidebar(htmlOutput); 
    } 

謝謝!

回答

2

您應該從來沒有在同一個命名空間中有兩個具有相同名稱的函數。它根本沒有意義:當functionName()呼叫發生時,應該執行哪個? (事實上​​,最後定義的功能將是倖存的功能,其餘功能則不會失蹤)。

尤其是,您不應該在同一個項目中有兩個onOpen函數,無論是一個文件還是單獨的文件(文件共享命名空間,這意味着一個文件中的函數可以從另一個文件中調用,就好像它們在相同的文件)。

但是你一個的OnOpen()函數可以簡單地調用任何函數需要運行:

function onOpen() { 
    doThisThing(); 
    doAnotherThing(); 
} 
+0

酷。感謝您的解釋。是的,我將兩件事情合併爲一,然後他們都工作了,我只是想知道爲什麼你們不能這樣做。這不是我原本計劃要做的事情,只是爲了以後在項目中包含大量文件和功能時進行實驗。再次,謝謝! – AmericanMade

+0

我也想指出,您可以擁有儘可能多的'.gs'文件,但就Google Apps腳本如何使用而言,它將完全相同,就好像它們都在一個文件中一樣。單獨的'.gs'文件有助於簡化代碼導航的單一目的。你也可以有幾個函數使用可安裝的'onOpen'觸發器,但是我相信你將無法控制哪一個被首先執行。 – Vytautas

相關問題