2016-12-14 25 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

相关问题