无法使用Logger.log从未定义的错误中读取属性“参数”

时间:2012-09-25 18:43:01

标签: google-apps-script

我从“undefined”获取“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;   
}

3 个答案:

答案 0 :(得分:1)

我刚刚测试了你的确切代码(除了表格之外的东西)并且它工作得很好......除了从处理程序函数调用记录器时没有显示任何内容但这是一个已知的问题......

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

 app.getElementById('info').setText(e.parameter.textBox).setStyleAttribute("color", "black");

答案 1 :(得分: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;   

亲切的问候,

Thomas van Latum

答案 2 :(得分:0)

我只是复制粘贴你的完整代码制作了一个电子表格并运行它。 它的工作原理完全不要忘记你的} ...