【问题标题】:How to pass a parameter to Picker API?如何将参数传递给 Picker API?
【发布时间】:2018-07-12 12:13:52
【问题描述】:

我遇到了和这里讨论的同样的问题:How to pass a parameter to html?

换句话说,我需要将参数传递给 Picker,以便他知道我正在选择什么文件。基于此文件类型,不同的函数将作为回调的一部分运行。

我正在使用 Google 提供的 Picker 示例:https://developers.google.com/apps-script/guides/dialogs

选择器显示如下代码:

function showPicker() {
  var html = HtmlService.createHtmlOutputFromFile('Picker.html')
      .setWidth(600)
      .setHeight(425)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi().showModalDialog(html, 'Select a file');
}

当然,现在我想将参数传递给选择器,以便它知道我要打开的文件。根据上一篇文章中提供的示例(实际上它看起来是最好的方法),我需要以下内容:

function doGet() {
    var htmlTemplate = HtmlService.createTemplateFromFile('Picker');
    htmlTemplate.dataFromServerTemplate = { first: "hello", last: "world" };
    var htmlOutput = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
        .setTitle('sample');
    return htmlOutput;
}

很遗憾,选择器窗口没有显示。如何解决?

任何帮助将不胜感激。

【问题讨论】:

  • 你检查浏览器的控制台窗口了吗?您发现任何错误吗?
  • 您的 Javascript 中发生了什么? HTML 是最简单的部分。没有必要“将参数传递给选择器”。当你构造新的 PickerBuilder 对象时,你通过调用'setCallback(callBack)'来设置回调函数。当回调函数触发时,它会接收包含有关您选择的详细信息的事件对象。只需检查回调函数中选定的数据并基于此执行其他代码。选择器不显示的原因有数百万,因此请发布您的 Javascript 代码和 console.log() 输出
  • 您好,感谢您的回复。这里有代码: 1) 显示 Picker(此代码有效): function showPicker() { var html = HtmlService.createHtmlOutputFromFile('Picker.html') .setWidth(600) .setHeight(425) .setSandboxMode(HtmlService.SandboxMode .IFRAME); SpreadsheetApp.getUi().showModalDialog(html, '选择一个文件');我可以为两个不同的目的调用 Picker(菜单中有 2 个项目)。我的 code.gs 如何理解使用了 2 个项目中的哪一个?
  • 请使用此符号@Hikari 回复 cmets。否则,我看不到您的 cmets 的通知。

标签: google-apps-script


【解决方案1】:

您可以在 HTML 模板的客户端 Javascript 中处理此问题。 Google 提供的示例在加载页面后立即显示 Picker,但不一定要这样。

您可以将 createPicker() 函数绑定到客户端 HTML 中的事件(例如,选择列表项)并将 DOM 元素的唯一 ID 传递给该函数。

HTML

<span id="item1" onClick="createPicker(this.id)"> Item1 </span> 

Javascript

function createPicker(id){
  // build the picker based on the id of the item selected
}

【讨论】:

  • Hi @Anton Google 示例创建空 HTML,然后在您按下 Picker.html 中的按钮后加载 API &lt;body&gt; &lt;div&gt; &lt;H2 id="myTitle"&gt;&lt;/H2&gt; &lt;button onclick='getOAuthToken()'&gt;Select a file&lt;/button&gt; &lt;p id='result'&gt;&lt;/p&gt; &lt;/div&gt; &lt;script src="https://apis.google.com/js/api.js?onload=onApiLoad"&gt;&lt;/script&gt; &lt;/body&gt; 然后它运行函数 getOAuthToken(),最后运行函数 createPicker(token)。对于这些愚蠢的问题,我很抱歉,但我是 Google Script 的新手。如何在这些文件中实现您的想法?
  • @Hikari 您只需在加载时调用令牌函数并将令牌存储在客户端(例如 var token = token;)在 createPicker() 函数中,您检查令牌是否通过'if (token) { // 做某事。 }'(假设 'var token' 是函数可访问的全局变量)。 Google Apps Script 基本上是 Javascript,因此您需要充分了解 JS 的基本概念,以便能够重构其他人的代码。否则,取得进展将非常困难。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
相关资源
最近更新 更多