2012-07-12 75 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