2012-07-12 76 views
0

我正在写一个小的谷歌应用程序脚本,它允许从开发人员列表中选择几个名称。但在我的doPost(E)的方法,我不能访问张贴值的数组(它undefinded),事件如果我检查所有复选框...无法访问事件发布值

function onOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    // add the new menu 
    var menuEntries = []; 
    menuEntries.push({name: "Edit page", functionName: "start"}) 
    ss.addMenu("My tools", menuEntries); 
} 


function start() { 

    var app = UiApp.createApplication(); 
    app.setTitle("Edit page"); 
    var formPanel = app.createFormPanel(); 
    var mainPanel = app.createVerticalPanel(); 
    var gridPanel = app.createGrid(1, 2); 

    // developpers 
    var developperPanel = app.createVerticalPanel() 
    var developpers = []; 
    developpers.push("John", "Peter", "Max", "Johnny"); 
    for (var i = 1; i < developpers.length; ++i) { 
    var checkbox = app.createCheckBox(developpers[i]).setName("dev"+i); 
    developperPanel.add(checkbox); 
    } 
    gridPanel.setWidget(0,0,app.createLabel("Developpers : ")); 
    gridPanel.setWidget(0,1,developperPanel); 

    // submit button 
    mainPanel.add(gridPanel); 
    mainPanel.add(app.createSubmitButton().setText("OK")); 
    formPanel.add(mainPanel); 
    app.add(formPanel); 

    var ss = SpreadsheetApp.getActive(); 
    ss.show(app); 
} 

function doPost(e) { 
    var app = UiApp.getActiveApplication(); 
    app.add(app.createLabel(e.values[0])); // Here is the error.  
    return app; 
} 

在为例,该列表是固定但在我的真实脚本中,我使用电子表格创建了列表。

感谢

最大

+0

你有没有试图命名你的启动函数'doGet'?我认为这是强制性的... – 2012-07-12 09:42:48

+0

是的,我试过了,但没有奏效。但是,如果我打电话给'e.parameter.dev1',我可以访问发送的值。 – Max 2012-07-12 09:48:40

+0

对不起,我想我不明白你想要做什么......你可以发布你的'doPost(e)'函数吗? – 2012-07-12 10:07:16

回答

1

正确的路上看到的复选框值是使用e.parameter[name],像你说的自己的注释。下面是一些代码示例:

function start() { 
    //... 
    var developpers = ["John", "Peter", "Max", "Johnny"]; 
    //you were skiping the first developer 
    for (var i = 0; i < developpers.length; ++i) { //array starts on zero, not one 
    var checkbox = app.createCheckBox(developpers[i]).setName("dev"+i); 
    developperPanel.add(checkbox); 
    } 
    //... 
} 

function doPost(e) { 
    var app = UiApp.getActiveApplication(); 
    var developpers = ["John", "Peter", "Max", "Johnny"]; //repeat it here or make it global, if it's static like this 
    var checked = []; 
    for(var i in developpers) 
    if(e.parameter['dev'+i] == 'true') 
     checked.push(developpers[i]); 
    app.add(app.createLabel(checked)); 
    return app; 
} 
+0

非常感谢Henrique,我已经找到了解决方案,但直到几个小时才回答我自己的问题。我还没有在Google文档中看到有关参数[name]的文档,只是参数名。我偶然发现它。 – Max 2012-07-12 15:48:06

+0

这是JavaScript的工作原理;它与Apps脚本无关。 – 2012-07-12 18:39:04

0

您应该使用e.parameter.yourCheckBoxName

例如:

function doPost(e) { 
    var app = UiApp.getActiveApplication(); 
    app.add(app.createLabel(e.parameter.dev1); // Access checkbox by its name 
    return app; 
} 

这将显示复选框 “彼得” 的状态时,它被选中。您可以根据您的需要进行修改。

+0

我还没有测试过它,但我非常确定复选框“返回值”将为true/false或true/undefined。但不是它的文本。 – 2012-07-12 13:32:59

+0

@Henrique Abreu,你是对的。如果未选中,它将不包含chekboxes参数。这意味着,如果您尝试访问这些复选框,则会返回未定义状态。另一方面,检查过的复选框将具有“开”的值而不是“真”。 – 2012-07-12 13:46:25

+0

我发现你对这个“开启”价值所说的话很奇怪,因为我根本没记得它。我现在去测试它,结果你确实错了。它返回的值始终为“真”或“假”,而不是“开”(或未定义,因为我也建议)。 – 2012-07-12 14:08:46