繁体   English   中英

如何存储多个文本框?

[英]How do I store multiple text boxes?

我正在Google App脚本中创建一个表单以一次创建多个事件,我有一些方法可以创建另一个事件文本框,然后将其添加到面板中,但是我不知道如何创建多个事件。 我应该如何存储多个文本框,以便可以在每个文本框上调用createEvent()?

function doGet(){

 var app = UiApp.createApplication().setTitle('QuickAdd Events');

 //Create a penel which holds all the form elelemnts
 var parent = app.createHorizontalPanel().setId('parent');
 var left = app.createVerticalPanel().setId('left').setWidth(200);
 var right = app.createVerticalPanel().setId('right');

 var eventTitleLabel = app.createLabel('Event Title:');
 var eventTitle = app.createTextBox().setName('eventTitle').setWidth(200);
 var eventButton = app.createButton('Create Events');
 var childButton = app.createButton('+ Event');

 left.add(eventTitleLabel)
     .add(eventTitle);  

 right.add(eventButton)
      .add(childButton);

 var eventHandler = app.createServerClickHandler('createEvents');
 eventHandler.addCallbackElement(left);
 eventButton.addClickHandler(eventHandler);

 var panelHandler = app.createServerClickHandler('createAnotherEvent');
 panelHandler.addCallbackElement(left);
 childButton.addClickHandler(panelHandler);

 parent.add(left)
       .add(right);

 app.add(parent);
 app.close();
 return app;
}

function createAnotherEvent(e){
 var app = UiApp.getActiveApplication();

 var eventTitleLabel = app.createLabel('Event Title:');
 var eventTitle = app.createTextBox().setName('eventTitle').setWidth(200);

 app.getElementById('left').add(eventTitleLabel)
                           .add(eventTitle);
 return app;
}

function createEvents(e){

 var app = UiApp.getActiveApplication();
try{
 //get the entries;
 var event = e.parameter.eventTitle;

 var cal = CalendarApp.getDefaultCalendar();
 cal.createEventFromDescription(event);

 app.add(app.createLabel('Event created Successfully'));

 //make the form panel invisible
 app.getElementById('parent').setVisible(false);
 return app;
 }

//If an error occurs, show it on the panel
catch(e){
  app.add(app.createLabel('Error occured: '+e));
  return app;
 }
}

我玩了一些您的代码,但是由于我不确定您到底想做什么,所以我不确定它会不会帮助您...

至少它显示了如何知道按下了哪个按钮,如何在循环中创建小部件并为其分配名称和ID ...但是我承认整件事有点混乱;-)

随时销毁您不需要的东西。

function doGet(){

  var app = UiApp.createApplication().setTitle('QuickAdd Events');
  var label = ['label title1','label title2','label title3','label title4']
  var title = ['title1','title2','title3','title4']
  //Create a penel which holds all the form elelemnts
  var parent = app.createHorizontalPanel().setId('parent');
  var left = app.createVerticalPanel().setId('left').setWidth(200);
  var right = app.createVerticalPanel().setId('right');
  var eventHandler = app.createServerClickHandler('createEvents');
  eventHandler.addCallbackElement(left);
  var panelHandler = app.createServerClickHandler('createAnotherEvent');
  panelHandler.addCallbackElement(left);

  for(var n in label){
  var eventTitleLabel = app.createLabel(label[n]);
  var eventTitle = app.createTextBox().setName(title[n]).setWidth(200);
  var eventButton = app.createButton('Create Events').setId('event'+n);
  var childButton = app.createButton('+ Event').setId('ch'+n);

  left.add(eventTitleLabel)
  .add(eventTitle);  

  right.add(eventButton)
  .add(childButton);

  eventButton.addClickHandler(eventHandler);

  childButton.addClickHandler(panelHandler);
  }  
  parent.add(left)
  .add(right);
  var hidden = app.createHidden('numberOfTitles').setId('numberOfTitles').setValue(n);// the number of events
  left.add(hidden);
  app.add(parent);
  app.close();
  return app;
}


function createAnotherEvent(e){
  var app = UiApp.getActiveApplication();
  var source = Number(e.parameter.source.replace(/\D/g,''));// the event number from the button pressed
  var numberOfTitles = Number(e.parameter.numberOfTitles);
  numberOfTitles++
    app.getElementById('numberOfTitles').setValue(numberOfTitles);
  var eventTitleLabel = app.createLabel('Event Title:');
  var eventTitle = app.createTextBox().setName('eventTitle'+numberOfTitles).setWidth(200);// this way the new textBow has a new predictable name and you can easily get it in the handler

  app.getElementById('left').add(eventTitleLabel)
  .add(eventTitle);
  return app;
}

function createEvents(e){
  Logger.log(JSON.stringify(e));
  var source = Number(e.parameter.source.replace(/\D/g,''));
  var numberOfTitles = Number(e.parameter.numberOfTitles);
  var app = UiApp.getActiveApplication();

  try{
    //get the entries;
    var event = e.parameter.eventTitle;

    var cal = CalendarApp.getDefaultCalendar();
    cal.createEventFromDescription(event);

    app.add(app.createLabel('Event created Successfully'));

    //make the form panel invisible
    app.getElementById('parent').setVisible(false);
    return app;
  }

  //If an error occurs, show it on the panel
  catch(e){
    app.add(app.createLabel('Error occured: '+e));
    return app;
  }
}

编辑:您的脚本让我想起了我前一段时间回答的旧帖子,在这里可能会引起您的关注: 存储和检索可乘小部件实例的标识符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM