2017-10-27 2 views
1

저는 초보자/아마추어 javascript/Google Apps Script 프로그래머입니다. 따라서 대답이 확실한 경우 용서해주세요. 또한, 내 대답을 찾기 위해 정확한 검색어를 모르더라도 너무 분명 할 수도 있습니다. 그렇다면, 속임수에 대해 유감입니다.다음 htmlOutput을로드하기 전에 Google Apps Script에서 사용자가 하나의 HtmlOutput에서 버튼을 선택하기를 기다리게하려면 어떻게해야합니까?

Google Apps Script 함수를 작성하여 이전에 사용자가 이전에 닫은 후에 각각의 창을 열 때마다 일련의 HtmlOutput 창을로드하는 것이 이상적입니다. 그러나 스크립트를 실행하면 사용자가 이전 창을 닫을 때까지 기다리지 않고 모든 창을 순서대로로드합니다.

나는 또한 Utilities.sleep() 기능을 사용하는 것이 가장 좋은 방법이 아니라는 것을 알고 있습니다. 그러나 이것이이 경우에 이것을 달성하는 유일한 방법인지 궁금합니다. 보다 분명하고 좋은 방법이있는 것 같습니다.

다음 창을로드하기 전에 프로그램이 사용자의 응답을 기다리게하려면 어떻게해야합니까? '두'> 사용자 가까이

  • 대화 상자를 클릭 - '하나'

    //THIS FUNCTION SETS UP THE HTMLOUTPUT 
    function setDialog(userText){ 
        var displayHtml = HtmlService.createHtmlOutput(
        '<!DOCTYPE html>'+ 
        '<html>'+ 
        '<head>'+ 
         '<base target="_top">'+ 
        '</head>'+ 
        '<body>'+ 
         '<h1>'+userText+'</h1>'+ 
         '<input type="button" value="Close" '+ 
          'onclick="google.script.host.close()" />'+ 
        '</body>'+ 
        '</html>'); 
        SpreadsheetApp.getUi() 
        .showModalDialog(displayHtml, 'Here's your HTML!'); 
    } 
    
    //THIS FUNCTION DISPLAYS 4 DIALOGS BASED ON VARIABLES 
    function displayDialogs(){ 
        var uOne = 'One'; 
        var uTwo = 'Two'; 
        var uThree = 'Three'; 
        var uFour = 'Four'; 
        setDialog(uOne); 
        setDialog(uTwo); 
        setDialog(uThree); 
        setDialog(uFour); 
    } 
    

    나는 것 위의 원하는 동작 :

    1. 대화 여기

      은 몇 가지 예제 코드입니다 -> 사용자가 닫기를 클릭합니다.
    2. 대화 상자 : '3'-> 사용자가 닫기를 클릭하십시오.
    3. 대화 상자 : '4'-> 사용자가 닫기를 클릭하십시오.

    대신에 나는 점점 오전 :

    1. 대화를 '하나'대화 '두'대화 '세'대화 '네'를 연거푸.
    2. 그런 다음 사용자가 클릭하여 네 번째 대화 상자를 닫을 수 있습니다.

    도움을 미리 감사 드리며 이것이 속임수라면 유감입니다. 게시하기 전에 답변을 검색했습니다.

  • 답변

    1

    다음과 같은 코드 수정은 연속 된 대화 상자를 표시하며, 이전 대화 상자가 닫힌 경우에만 표시하고 더 이상 표시하지 않을 경우 중지합니다.

    전역 변수를 JSON 객체로 사용하면 흐름을 제어하는 ​​데 도움이됩니다. 다음 대화 상자를 열려면 대화 상자를 닫기 전에 "닫기"버튼에 google.script.run 함수 호출이 있어야합니다.

    var GLOBAL_OBJECT_FOR_NEXT_DISPLAY = {//Use all caps for Global variables 
        "1":"Two", 
        "2":"Three", 
        "3":"Four" 
    
    } 
    
    //THIS FUNCTION SETS UP THE HTMLOUTPUT 
    function setDialog(userText, thisLoop){ 
        var displayHtml = HtmlService.createHtmlOutput(
        '<!DOCTYPE html>'+ 
        '<html>'+ 
        '<head>'+ 
         '<base target="_top">'+ 
        '</head>'+ 
        '<body>'+ 
         '<h1>'+userText+'</h1>'+ 
         '<input type="button" value="Close" '+ 
          'onclick="google.script.run.showNext(' + thisLoop + ');google.script.host.close(); " />'+ 
        '</body>'+ 
        '</html>'); 
        SpreadsheetApp.getUi() 
        .showModalDialog(displayHtml, "Here's your HTML!"); 
    } 
    
    //THIS FUNCTION DISPLAYS 4 DIALOGS BASED ON VARIABLES 
    function displayDialogs(){ 
        var uOne = 'One'; 
        setDialog(uOne,1); 
    } 
    
    function showNext(count) { 
        var whatNext; 
    
        count = count.toString(); 
        Logger.log('count: ' + count) 
    
        whatNext = GLOBAL_OBJECT_FOR_NEXT_DISPLAY[count]; 
        Logger.log('whatNext: ' + whatNext) 
    
        if (!whatNext) {return;}//Stop if there is no next value found 
    
        setDialog(whatNext,Number(count) + 1); 
    
    } 
    
    +0

    감사합니다, 샌디, 내 질문에 대답했습니다. 내 정확한 사용 사례에 맞추기 위해 조금만 손보고 있습니다. 하나의 아이디어는 객체 대신 배열을 사용하여보다 쉽게 ​​반복 할 수 있도록하는 것입니다. 나는 또한'google.script.run'을 사용하여 다른 매개 변수를 전달할 때 몇 가지 문제를 겪고 있는데, 이는 별개의 질문으로 남겨 두는 것이 더 낫습니다. 다시 한 번 감사드립니다! – snoski

    관련 문제