我怎么能与其父母(侧边栏)沟通页面?

时间:2014-04-26 12:02:10

标签: google-apps-script google-sheets google-docs google-apps-script-addon

我正在将我的剧本转换成一个补充。其中一个需求是配置模板,因此我编写了一个侧栏,用于启动字段选择器。由于侧边栏没有足够的空间容纳选择器,我必须通过在侧边栏中创建的模态对话框启动它,方法是在服务器端调用此代码:

var html = HtmlService.createHtmlOutputFromFile('TemplatePicker.html')
  .setWidth(600).setHeight(425);
SpreadsheetApp.getUi().showModalDialog(html, 'Select the file with the template');

我的问题是,一旦用户选择了文件,当我拥有所选文件的ID时,我无法将该ID传递给侧边栏。我尝试调用someJSFunctionOfSidebar(id)parent.someJSFunctionOfSidebar(id),但它不起作用,所以我最终结束了将值传递到服务器端并从那里重新加载侧边栏,但它很慢并且结果效果很难看

我的问题是:

有没有办法将客户端级别的值从使用SpreadsheetApp.getUi().showModalDialog创建的模式对话框传递给其父级?也许它不是真正的父母,这也是它不起作用的原因。

1 个答案:

答案 0 :(得分:7)

  

也许它不是真正的父母,这也是它不起作用的原因。

对 - 这里实际上没有DOM父/子关系。侧边栏和模态对话框都是从服务器端脚本启动的,并且是独立的。但是,它们都可以与服务器通信,因此您可以使用存储转发技术将选择器的结果传递到侧边栏。

基本理念:

  • 侧边栏会在请求选择器启动时立即开始轮询服务器以获取选择器的结果。
  • 选择器的结果将使用google.script.run发送到服务器。
  • 服务器会暂时存储结果 - 这可能就像全局变量一样简单,具体取决于您的情况。
  • 一旦有结果,下一个轮询将检索它。

查看How to poll a Google Doc from an add-on了解轮询器的基本概念。

Message Sequence Chart