【问题标题】:Google Script Pass variable to templated HTMLService谷歌脚本将变量传递给模板化的 HTMLService
【发布时间】:2016-05-28 03:41:28
【问题描述】:

我有一个已发布为网络应用程序的脚本。我想根据用于运行 Web 应用程序的 URL 更改默认设置。我已经打开了两种形式之一,但在一种形式上,我想根据第二个传递的参数选择一个单选按钮。在服务器端 gs 文件中我有:

function doGet(passed) {

  switch(passed.parameter.form) {
    case 'single':
        var result = HtmlService.createTemplateFromFile('Single').evaluate();
        result.setHeight(550);
        result.setWidth(565);
        break;
    case 'grid':
    default:
        var result=HtmlService.createTemplateFromFile('GridView').evaluate();
        result.setHeight(550);
        result.setWidth(1285);
      }

  return result;
    }

在 Google 的 HTML 服务:模板化 HTML 页面上有一个部分 Pushing variables to templates,这似乎是我想要的,但我无法让它工作。

在我的 Single.html 文件中,我有:

      <body>
         <? if (data === "Ex") { ?> Existing <? } else { ?> New <? } ?>    
       ... </body>

上面的 html 部分被过度简化了,让它工作会让我达到目的,这是一个更大的页面,带有输入区域等。

为了让“现有”显示在结果页面中,我将上面的代码更改为:

function doGet(passed) {

  switch(passed.parameter.form) {
    case 'single':
        var result = HtmlService.createTemplateFromFile('Single');
        result.setHeight(550);
        result.setWidth(565);
        result.data = 'Ex';
        return result.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
        break;
    case 'grid':
    default:
        var result=HtmlService.createTemplateFromFile('GridView').evaluate();
        result.setHeight(550);
        result.setWidth(1285);

        return result;
      }

    }

并得到错误

TypeError:在对象 HtmlTemplate 中找不到函数 setHeight。 (第 131 行,文件“代码”)

即使我删除了 setHeight 和 setWidth 导致只有上面引用的页面上显示的数据,我也会收到错误。

有人将变量传递给这样的页面吗?

【问题讨论】:

    标签: google-apps-script google-apps


    【解决方案1】:

    看起来方法调用的顺序错误。 result.data = 'Ex'; 应该在.evaluate() 之前,但.setHeight().setWidth() 必须在之后应用。稍微修改你的最后一个例子:

    case 'single':
            var result = HtmlService.createTemplateFromFile('Single');
            result.data = 'Ex';
    
            return result.evaluate()
                         .setHeight(550)
                         .setWidth(565)
                         .setSandboxMode(HtmlService.SandboxMode.IFRAME);
            break;
    

    在您的 HTML 文件中的 if 语句之后,我将基本错误追查到遗漏的 }。代码应如下所示:

    <? if (data === "Ex") { ?> Existing <? } else { ?> New <? } ?>
    

    【讨论】:

    • 完美!谢谢你。在我的 HTML 中添加一个 } 之后(我在原始帖子中编辑了我的示例以反映那里的正确语法),这是有效的!非常感谢!
    • 我的荣幸!当我注意到自己错过了 } 时,你跳了进去。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2019-04-03
    • 2011-05-08
    • 2015-08-24
    相关资源
    最近更新 更多