javascript - ServerClickHandler 结果为 "Error encountered: Required: required"

标签 javascript google-apps-script

我的 Google Apps 脚本中的 ServerClickHandler 似乎有问题。 运行我的应用程序并提交按钮时,错误消息是“遇到错误:必需:必需” 有谁知道为什么会这样?

var User = new Object(),
Url  = new Object();
// Startet die Web-App
function doGet() {
  User.email = Session.getActiveUser().getEmail();

  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();//Create a panel which will hold all the elements
  var longUrlLabel = app.createLabel( 'lange E-Mail hier eingeben - Kurzlink wird dann per E-Mail zugesendet' );
  var longUrlBox = app.createTextBox().setName( 'longUrl' )
                                    .setText( 'http://www.' );
  var longUrlLabelInfo = app.createLabel().setId( 'shortUrlLabelInfo' ).setVisible( false );
  var button = app.createButton( 'Ausführen' );


  var handler = app.createServerClickHandler( 'buttonOnClickListener' );
  //createHandler for the Button-onClick-Event.
  handler.addCallbackElement( panel );
  button.addClickHandler( handler ); //Add this handler to the button 

  //Add all the UI elements to the panel
  panel.add( longUrlLabel )
       .add( longUrlBox )
       .add( button );
  app.add( panel );//Add the panel to the application
  return app;
}

function buttonOnClickListener( eventInfo ) {
  var app;
  Url.long  = eventInfo.parameter.longUrl.toString();
  Url.short = UrlShortener.Url.insert( UrlShortener.newUrl().setLongUrl( Url.short ) );
  sendMail();
  app = UiApp.getActiveApplication();
  app.getElementById( 'longUrlLabelInfo' ).setVisible(true).setText( Url.short );

  return app; 
}

function sendMail() {
  GmailApp.sendEmail( User.email, "UrlShortener", Url.long+" -> "+Url.short );
}

最佳答案

尝试这样:(编辑:我确实改进了 UI 和电子邮件布局以获得更清晰和可读的值(value) + 翻译成英文 ;-) 对此感到抱歉,但我的德语很差。(;-)

var User = new Object(),
Url  = new Object();
User.email = Session.getActiveUser().getEmail();

function doGet() {
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel().setStyleAttributes({'padding':'40px','backgroundColor':'#fafacc'});
  var longUrlLabel = app.createLabel( 'Enter the long url starting with http:// you will receive an email with the short url immediately.' );
  var longUrlBox = app.createTextBox().setName( 'longUrl' ).addClickHandler(app.createClientHandler().forEventSource().setText(''))
  .setText( 'http://' ).setWidth('500');
  var shortUrlLabel = app.createHTML().setId( 'shortUrlLabel' ).setVisible( false );


  var handler = app.createServerHandler( 'buttonOnClickListener' ).addCallbackElement( panel );
  var button = app.createButton( 'SUBMIT',handler ).setStyleAttributes({'border-radius':'5px'});

  var grid = app.createGrid(8,1).setId('grid')
  .setWidget(0,0,longUrlLabel )
  .setWidget(2,0,longUrlBox )
  .setWidget(4,0,button )
  .setWidget(6,0,shortUrlLabel);

  return app.add( panel.add(grid));
}

function buttonOnClickListener( eventInfo ) {
  var app =UiApp.getActiveApplication();
  var toShorten = UrlShortener.newUrl().setLongUrl(eventInfo.parameter.longUrl);
  var shortened = UrlShortener.Url.insert(toShorten);
  Url.short = UrlShortener.Url.insert(toShorten);
  Url.long = eventInfo.parameter.longUrl;
  sendMail();
  app = UiApp.getActiveApplication();
  app.getElementById( 'shortUrlLabel' ).setVisible(true).setHTML('<li>Short url = <b>'+Url.short.id+'</b></li><li>Mail sent ...</li>');
  app.getElementById('grid').setWidget(7,0,app.createAnchor('test (with redirect warning)', Url.short.id));

  return app; 
}

function sendMail() {
  GmailApp.sendEmail( User.email, "UrlShortener", 'Long url (original) = '+Url.long+"\n\n\nShort url = "+Url.short.id);
}

enter image description here

关于javascript - ServerClickHandler 结果为 "Error encountered: Required: required",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437254/

相关文章:

javascript - 列表框不将字符串传递给谷歌脚本

javascript - 钛合金SplitWindow IOS奇怪的行为变化宽度

javascript - 区分动态id

google-apps-script - 按照德国书写格式格式化数字的函数

javascript - 如果电子邮件在 Gmail 的主题或正文中包含特定字词,则使用脚本对其进行标记

javascript - 如何将来自 HTML UI 的多个输入添加到 Google 电子表格?

javascript - React Native 嵌入阴影效果

javascript - 计时器在页面加载时保持运行但不显示内容

javascript - 如何让 JavaScript 继续使用 ResonseText 数据

google-apps-script - 使数组唯一