Google Script - 从处理程序向href添加动态参数

时间:2014-02-26 02:16:49

标签: dynamic google-apps-script href

我将Google脚本作为网络应用发布,该应用使用UI服务显示包含多个列表框的界面。我可以通过服务器处理程序获得所选的值。

我的问题是我需要将这些值添加到我的doGet例程中定义的锚点中的url。 (我正在调用JotForm网址,需要动态参数来预填充表单)

我看不到如何从处理程序函数修改锚点,或者以其他任何方式调用我在代码中构建的url。

1 个答案:

答案 0 :(得分:0)

如果要修改使用UiApp创建的Ui中的任何窗口小部件,每个窗口小部件都必须具有可用于getElementById()的ID并操纵您想要的方式,就像您在doGet功能。

这是一个简单的例子来说明:(online here

function doGet(){
  var app = UiApp.createApplication().setTitle('test');
  var serieNames = ['  serie A','  serie B','  serie C'];
  var panel = app.createVerticalPanel().setStyleAttribute('padding','30px');
  var namesHandler = app.createServerHandler('showPilots').addCallbackElement(panel);
  for(var n in serieNames){
    var serieSelect = app.createRadioButton('pilotSelect',serieNames[n]).setId('s'+n).addClickHandler(namesHandler)
    panel.add(serieSelect);
  }
  app.add(panel);
  return app;
}


function showPilots(e){
  Logger.log(JSON.stringify(e));// you can see the source parameter in e that returns the widgets ID of the button you clicked to call the handler
  var app = UiApp.getActiveApplication();
  var serie = e.parameter.source; // get the ID
  app.add(app.createLabel('you clicked '+e.parameter.source));// then get this widget by its ID and modify it
  app.getElementById(serie).setText('Clicked');// modify it
  return app;// update Ui
} 

编辑:这是一个操纵锚点的版本,完全可以从处理程序中更改URL。

test here

代码:

function doGet(){
  var app = UiApp.createApplication().setTitle('test');
  var links = ['link 1','  link 2','  link 3'];
  var linkshref = ['http://www.google.com','http://www.packtpub.com/google-apps-script-for-beginners/book','http://stackoverflow.com/questions/tagged/google-apps-script'];
  var panel = app.createVerticalPanel().setStyleAttribute('padding','30px');
  var namesHandler = app.createServerHandler('changeUrl').addCallbackElement(panel);
  for(var n in links){
    var linkWidget = app.createAnchor(links[n], linkshref[n]).setId('s'+n);
    panel.add(linkWidget);
  }
  var btn = app.createButton('change links',namesHandler);
  app.add(panel.add(btn));
  return app;
}


function changeUrl(e){
  Logger.log(JSON.stringify(e));// you can see the source parameter in e that returns the widgets ID of the button you clicked to call the handler
  var app = UiApp.getActiveApplication();
  var links = ['New link 1','New link 2','new link 3'];
  var linkshref = ['http://www.microsoft.com','http://www.w3schools.com/js/','https://sites.google.com/site/appsscriptexperiments/'];
  for(var n in links){
    app.getElementById('s'+n).setHref(linkshref[n]).setHTML(links[n]);
  }
  return app;// update Ui
}