1

我收到“TypeError:无法从未定义中读取属性“参数”。” 尝试记录 e.parameter 属性时。(我在 contactMe() 函数中插入了以下几行)

Logger.log(e.parameter.textBox);
Logger.log(e.parameter);

否则脚本可以正常工作,知道吗?

function doGet() {
  var app = UiApp.createApplication();

  var mainPanel = app.createVerticalPanel().setId('mainPanel');
  app.add(mainPanel);

  mainPanel.add(app.createLabel('Enter your email to sign up'));

  var form = app.createHorizontalPanel();
  mainPanel.add(form);

  var email = app.createTextBox().setName('textBox').setId('textBox');
  form.add(email);

  var button = app.createButton('Sign up');
  form.add(button);

  var info = app.createLabel().setVisible(true).setId('info');
  mainPanel.add(info);

  //handler
  var handler = app.createServerHandler('contactMe').addCallbackElement(mainPanel);
  button.addClickHandler(handler);

  return app;
}

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

 Logger.log("testing");
 Logger.log(e.parameter);
 Logger.log(e.parameter.textBox);

 app.getElementById('textBox').setValue('').setStyleAttribute("color", "black");
 app.getElementById('info').setText('Thank you!').setStyleAttribute("color", "black");

 var ss = SpreadsheetApp.openById('0AqKSxC6f0Cc7dF9aT1lUeXFEcnR2eUFYRGs4Y1NiVVE')
                        .getSheets()[0];
 var range = ss.getRange(ss.getLastRow()+1, 1, 1, 2);

 var values = [[new Date(),e.parameter.textBox]];  
 range.setValues(values); 

 return app;   
}
4

3 回答 3

1

我刚刚测试了你的确切代码(除了工作表的东西),它运行良好......除了记录器在从处理程序函数调用时不显示任何内容,但这是一个已知问题......

我使用标签来检查 e.parameter 值,如下所示:

 app.getElementById('info').setText(e.parameter.textBox).setStyleAttribute("color", "black");
于 2012-09-25T18:59:11.803 回答
0

有点开箱即用,但我认为它应该可以工作:

function doGet() {
  var app = UiApp.createApplication();

  var mainPanel = app.createFormPanel;
  app.add(mainPanel);

  mainPanel.add(app.createLabel('Enter your email to sign up'));

  var form = app.createHorizontalPanel();
  mainPanel.add(form);

  var email = app.createTextBox().setName('textBox').setId('textBox');
  form.add(email);

  var button = app.createSubmitButton('Sign up');
  form.add(button);

  var info = app.createLabel().setVisible(true).setId('info');
  mainPanel.add(info);

  return app;
}

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

 //Logger wont work in uiApps
 //in Form panels the UI is cleared so you want to write a thank you note
 app.add(app.createLabel("Thanks"));


 var ss = SpreadsheetApp.openById('0AqKSxC6f0Cc7dF9aT1lUeXFEcnR2eUFYRGs4Y1NiVVE')
                        .getSheets()[0];
 var range = ss.getRange(ss.getLastRow()+1, 1, 1, 2);

 var values = [[new Date(),e.parameter.textBox]];  
 range.setValues(values); 

 return app;   

亲切的问候,

托马斯·范拉图姆

于 2012-09-25T20:10:25.680 回答
0

我只是复制粘贴了你的完整代码,制作了一个电子表格并运行它。它工作得很好,最后不要忘记你的 } .....

于 2012-09-25T20:41:58.890 回答