2012-07-12 4 views
0

developpers 목록에서 여러 가지 이름을 선택할 수있는 작은 Google Apps 스크립트를 작성하고 있습니다. 내가 모든 확인란을 선택하지만 내의 doPost (예) 방법, 난 exemple에서 이벤트 게시 된 값에 액세스 할 수 없습니다.

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; 
} 

이 목록은 고정입니다 ... 게시 된 값의 배열 (이 undefinded 것), 이벤트에 액세스 할 수 없습니다 그러나 나의 진짜 원본에서는, 나는 스프 레트 시트 덕분에 명부를 창조한다.

감사

최대

+0

시작 기능의 이름을 'doGet'으로 지정하려 했습니까? 나는 그것이 필수라고 생각합니다 ... –

+0

예, 시도했지만 작동하지 않았습니다. 그러나 'e.parameter.dev1'호출하면 보낸 된 값을 액세스 할 수 있습니다. – Max

+0

미안하지만, 당신이하려고하는 것을 정확히 이해하지 못한다고 생각합니다 ... doPost (e) 함수를 게시 할 수 있습니까? –

답변

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 문서에서 매개 변수 [이름]에 대한 문서를 보지 못했습니다. 단지 parameter.name입니다. 나는 그것을 우연히 발견했다. – Max

+0

이것은 JavaScript가 작동하는 방식입니다. 특히 Apps Script와 관련이 없습니다. –

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가 될 것이라고 확신합니다. 그러나 그 본문은 아닙니다. –

+0

@Henrique Abreu, 당신 말이 맞아요. 매개 변수에 체크 표시가없는 경우 첵크 박스가 매개 변수에 포함되지 않습니다. 즉, 해당 확인란에 액세스하려고하면 정의되지 않은 값이 반환됩니다. 반대쪽에있는 체크 박스는 "true"대신 "on"값을가집니다. –

+0

나는 이걸 "기억"하지 못했기 때문에 당신이 "on"가치에 대해 말한 것을 매우 이상하게 보았습니다. 나는 가서 지금 시험해 보니 당신이 틀렸다는 것이 드러났습니다. 반환되는 값은 항상 "true"또는 "false"이며 문자열이 아니라 "on"(또는 내가 제안한 것처럼 정의되지 않음)입니다. –

관련 문제