在模板和服务器端脚本 (gs) 之间传递值

Passing values between templates and server side script( gs)

我有 - 3 个文件,

  1. sidebar.html(第 1 步)
  2. model_less_dialog.html(第 2 步)
  3. 服务器端脚本 (.gs)

我想做什么: 我想在服务器端脚本上发送 sidebar.html 和 model_less_dialog.html 的值。

我现有的解决方案与

一起工作正常

localStorage.setItem('selectedSidebarValues', selectedData);

在模板和服务器端之间传递信息。我想找到一个最佳实践来在模板和服务器端脚本之间传递值,而不是 localStorage()。用户可以在将其发送到服务器端脚本 (.gs) 之前修改 localStorage() 这可能很危险

第 1 步 sidebar.html :

$("#selectBtn").on("click",function() {

    -------------------
    --- piece of code ---
    -------------------
    
    var selectedData = 'all selected values';

    //storing step 1 selected data in local storage.
    localStorage.setItem('selectedSidebarValues', selectedData);
    
    //call the server script method to open the model less dialog box
    google.script.run
          .withSuccessHandler(
              function(result, element) {
                  element.disabled = false;
              })
          .withFailureHandler(
              function(msg, element) {
                  console.log(msg);
                  element.disabled = false;
              })
          .withUserObject(this)
          .openModelLessDialogBox();
  
});

步骤 2 model_less_dialog.html:

$("#selectBtnModelLessDialogBox").on("click",function(){

    //collecting step 1 selected data from local storage.
    var selectStep1 = localStorage.getItem('selectedSidebarValues');
    var selectStep2 = 'all selected values';

    //call the server script method
    google.script.run
        .withSuccessHandler(
            function(result, element) {
                element.disabled = false;
            })
        .withFailureHandler(
            function(msg, element) {
                console.log(msg);
                element.disabled = false;
            })
        .withUserObject(this)
        .calculatePolicy(selectStep1, selectStep2);
  });

服务器端脚本 (.gs) :

function openModelLessDialogBox() {
   var ui = SlidesApp.getUi();
   var htmlOutput = HtmlService
                           .createHtmlOutputFromFile('model_less_dialog')
                           .setWidth(250)
                           .setHeight(300);
   ui.showModelessDialog(htmlOutput, 'model less dialog');
}
 
function calculatePolicy(selectStep1, selectStep2) {
  ----- ----- --- 
  ----- ----- --- 
  ----- ----- ---
}

这就是我将值传递给服务器的方式。

最简单的方法是在templates中传递数据:

  • 侧边栏使用参数 selectedData

    调用 modaldialog
    .openModelLessDialogBox(selectedData);
    
  • 模态对话框有一个模板:

    var selectStep1 = <?= sidebarData?>
    
  • 通过服务器将数据从侧边栏传递到模态对话框:

    function openModelLessDialogBox(sidebarData) {
       var ui = SlidesApp.getUi();
       var htmlTemp = HtmlService.createTemplateFromFile('model_less_dialog');
       htmlTemp["sidebarData"] = sidebarData;
       var htmlOutput = htmlTemp.evaluate()
                         .setWidth(250)
                         .setHeight(300);
       ui.showModelessDialog(htmlOutput, 'model less dialog');
    }
    

另一种方式是通过window.top直接沟通。参见 Related answer