简体   繁体   English

如何存储多个文本框?

[英]How do I store multiple text boxes?

I am creating a form in Google App Script to create multiple events at once, I have methods to create another event text box and then add it to the panel but I don't know how to create the multiple events. 我正在Google App脚本中创建一个表单以一次创建多个事件,我有一些方法可以创建另一个事件文本框,然后将其添加到面板中,但是我不知道如何创建多个事件。 How should I store the multiple text boxes so that I can call createEvent() on each of them? 我应该如何存储多个文本框,以便可以在每个文本框上调用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;
 }
}

I played a bit with your code but since I don't know exactly what you want to do I'm not sure it will help... 我玩了一些您的代码,但是由于我不确定您到底想做什么,所以我不确定它会不会帮助您...

At least it shows how to know which button was pressed, how to create widgets in loops and assign them names and ids... but the whole thing is a bit messy I admit ;-) 至少它显示了如何知道按下了哪个按钮,如何在循环中创建小部件并为其分配名称和ID ...但是我承认整件事有点混乱;-)

feel free to destroy what you don't need. 随时销毁您不需要的东西。

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;
  }
}

EDIT : your script makes me think about an old post I answered a while ago, It might interrest you to have a look at it here : Store & retrieve the identifiers of a multipliable widget's instances 编辑:您的脚本让我想起了我前一段时间回答的旧帖子,在这里可能会引起您的关注: 存储和检索可乘小部件实例的标识符

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

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