Создание объекта из другого объекта или массива в скриптах Google Apps и javascript / jQuery - PullRequest
0 голосов
/ 26 февраля 2019

Я получаю следующий объект с функцией из надстройки электронных таблиц с помощью скрипта Google Apps:

Функция:

function collectAllData(){
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);
  var fileData = sheet.getDataRange().getValues();
  Logger.log(fileData);
  return fileData;
}

ОбъектПолучено:

[[File ID 1, File Name 1, File Type 1, File Category 1, File Image 1, File Description 1], [File ID 2, File Name 2, File Type 2, File Category 2, File Image 2, File Description 2], ...]

Мне нужно преобразовать этот объект в следующий объект в моем HTML-шаблоне

 <script>
    try {
            var file_data = ({
                'File ID 1':{
                    id:"File ID 1",
                    name:"File Name 1",
                    type:"File Type 1"
                    cat:"File Category 1",
                    desc:"File Description 1",
                    img:"File Image 1"
                },
                'File ID 2':{
                    id:"File ID 2",
                    name:"File Name 2",
                    type:"File Type 2"
                    cat:"File Category 2",
                    desc:"File Description 2",
                    img:"File Image 2"
                }
            });
        } catch(e) {
            var file_data = null;
        }
    </script>

Есть ли какой-нибудь правильный способ сделать это в моем Code.gsи затем передаю его в template.html?

Я сейчас строю это в своем template.html, но я уверен, что есть более эффективные способы сделать это.Кроме того, я постоянно получаю следующую ошибку: SyntaxError: missing } after property list

вот мой текущий код из моего template.html

  <script>
  try {
  var file_data = ({
  <? for (var i=1; i<fileData.length; i++){
  var x = i < fileData.length-1 ? ',' : ''; ?>
    '<?!= fileData[i][8] ?>':{
       id:"<?!= fileData[i][8] ?>",
       title:"<?!= fileData[i][0] ?>",
       ext:"<?!= fileData[i][1] ?>",
       cat:"<?!= fileData[i][2] ?>",
       cost:"<?!= fileData[i][3] ?>",
       desc:'<?!= fileData[i][4] ?>',
       img:"<?!= fileData[i][5] ?>",
       url:"<?!= fileData[i][6] ?>",
       status:"<?!= fileData[i][7] ?>"
  }<?!= x;
  }?>
  });
  } catch(err) {
    var file_data = null;
  }
  </script>

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Немного другой подход:

html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <script>
  window.onload=function(){
    google.script.run
    .withSuccessHander(fileData){
      for(var i=0;i<fileData.length;i++) {
      {
        var file_dataA.push({id:fileData[i][8],title:fileData[i][0],ext:fileData[i][1],cat:fileData[i][2],cost:fileData[i][3],desc:fileData[i][4],img:fileData[i][5],url:fileData[i][6],status:fileData[i][7]});
      }
    }
   .collectAllData();
  </script>
  <body>

  </body>
</html>

Вы также используете функцию готовности JQuery.

gs:

function collectAllData(){
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);
  var fileData = sheet.getDataRange().getValues();
  return fileData;
}

Очень часто я собираю html на стороне сервера и передаю его в виде строки клиенту, а затем просто загружаю в div с $("#id").html() или getElementById().innerHTML=

0 голосов
/ 26 февраля 2019

Вы можете легко упорядочить данные и отправить их клиенту 1 и проанализировать их на стороне клиента.

Фрагмент:

На стороне сервера:

function collectAllData(){
.
.
  return JSON.stringify(fileData); 
}

ClientSide:

<script>
var file_data={};
google.script.run
    .withSuccessHandler(parseArray)
    .collectAllData();

function parseArray(arr){
arr = JSON.parse(arr);
arr.forEach((row)=>{
  file_data[row[0]] ={
    id:row[0],
    name:row[1],
    type:row[2],
    cat:row[3],
    desc:row[5],
    img:row[4]
  }
})
console.log(file_data);
}
</script>

Вы также можете выполнить синтаксический анализ на стороне сервера и передать разобранный строковый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...