Можно ли использовать операторы If / Else на HTML-стороне Google Script WebApp? - PullRequest
0 голосов
/ 29 мая 2019

Этот вопрос является дополнительным вопросом к: Можно ли создать интерактивное веб-приложение с помощью GAS?

Я пишу сценарий, который должен выполнять следующие действия:

  • Запросите у пользователя его номер пользователя
  • Запросите у пользователя номер строки в электронной таблице (если он его знает) и некоторую дополнительную информацию.
    • Если они не знают строку, найдите для них строку и отобразите ее.
  • Попросите у них дополнительную информацию.

Это, очевидно, требует оператора if / else.Я просто не знаю, как его сформировать.

Я пытался разместить код на стороне клиента и сервера, и ни один из них не работает.Я также понял, что некоторые JS, кажется, работают на стороне клиента, а некоторые нет. Соответственно, я исследовал JS на стороне клиента в целом, но не нашел конкретных правил для того, что работает и не работает.

html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  <center>
Enter your User ID below. If you are re-using a row in your Catalog Spreadsheet (meaning you know the row number),<br>
enter it below in the "Song ID" field, enter the Song Title, and then click the "Continue" button. Else, enter your<br> 
User ID only and click the "Continue" button. We will find the next avalable empty row at the end of your Catalog<br>
Spreadsheet and display its value to you. Then you may enter it and your Song Title. After you do, click the<br> 
"Continue" button to create the lyric sheet and add the new song to your Catalog Spreadsheet.<br><br>

Note: We will automatically add your name to the lyric sheet as the songwriter. Add additional writers manually<br>
on the lyric sheet.<br><br>

<div>
<input id="user" type="text" placeholder="User ID"><br><br>
<div  id="results"></div>
</div>
<input id="song" type="text" placeholder="Song ID"><br><br>
<input id="title" type="text" placeholder="Song Title"><br><br>
<input type="button" value="Continue" onclick="saveUserInput()"><br><br>
</center>
<script>

   function saveUserInput() {
     var userId = document.getElementById('userId').value;
     var songId = document.getElementById('userId').value;
      if(songId != ""){
        window.saveUserInput = function() {
         var userId = document.getElementById('userId').value;
         var songId = document.getElementById('songId').value;
         var songTitle = document.getElementById('idNewSongTitle').value;
             console.log('songTitle: ' + songTitle)
         google.script.run
             .withSuccessHandler(openPrompt)
             .getSongId({userId:userId, songId:songId, songTitle:songTitle})
      }
      }
      else {
       google.script.run
          .withSuccessHandler(function(hl){
            document.getElementById('results').innerHTML=hl;
          })
          .getSongId({userId:userId})
      }

       function openPrompt(results){
           window.open(results.url, '_blank').focus();
      }
      }
    </script>
  </body>
</html>

gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function getSongId(uObj) {
  var userId = uObj.userId;
  var songId = uObj.songId;
  var songTitle = uObj.songTitle;

   if(songId !=""){

Code not included to keep this brief, but it has been tested in other applications of this project and works and what it does is: if the user has entered a Song ID, this code creates the new lyric sheet and adds the new song name to the Catalog SS.

      }
     else{

This code does this:
     return ('The next available row for the new song is '+songId);
        }
}

Когда я запускаю то, что у меня есть, выходная запись Transcript выполнения выглядит следующим образом:

  • [19-05-29 07:54:16: 951 EDT] Начало выполнения
  • [19-05-29 07: 54: 16: 959 EDT] HtmlService.createHtmlOutputFromFile ([индекс]) [0 секунд]
  • [19-05-29 07: 54: 16: 961 EDT] HtmlOutput.getContent () [0 секунд]
  • [19-05-29 07: 54: 16: 961 EDT] HtmlOutput.getTitle () [0 секунд]
  • [19-05-29 07: 54: 16: 962 EDT] Выполнение выполнено [общее время выполнения 0,003 секунды]

1 Ответ

0 голосов
/ 31 мая 2019

Пересмотренный / исправленный html

Получил это полностью работает.пересмотренный HTML ниже.Последняя часть головоломки состояла в том, чтобы сделать songId равным 0, когда он не введен, а затем проверить на ноль в стороне gs.Потому что, если поле songId оставить пустым, оно отображается как «неопределенное», что нарушает оператор if / else на стороне gs.

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  <center>
Enter your User ID below. 

<div>
<input id="user" type="text" placeholder="User ID"><br><br>
<div  id="results"></div>
</div>
<input id="song" type="text" placeholder="Song ID"><br><br>
<input id="title" type="text" placeholder="Song Title"><br><br>
<input type="button" value="Continue" onclick="saveUserInput()"><br><br>

</center>
<script>

   function saveUserInput() {
     var userId = document.getElementById('user').value;
     var songId = document.getElementById('song').value;
     var songTitle = document.getElementById('title').value;

         console.log('songTitle: ' + songTitle)

   // If songId is supplied by user...
   if(songId != ""){
      google.script.run
          .withSuccessHandler(openNewDoc)
          .getSongId({userId:userId, songId:songId, songTitle:songTitle})

     function openNewDoc(results){
           window.open(results.url, '_blank').focus();
   }
   }
    // If songId is blank
    else {
       var songId = 0;
       google.script.run
          .withSuccessHandler(function(hl){
            document.getElementById('results').innerHTML=hl;
          })
          .getSongId({userId:userId, songId:songId})
        }
 }
    </script>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...