在Google Apps脚本中获取按下按钮的ID或标记

时间:2014-07-21 22:01:17

标签: javascript google-apps-script

我正在尝试使用Google AppsScripts获取for {}期间生成的Button ID或TAG的值,并放置在FlexTable中。

我必须使用FlexTable,因为表的大小会根据我正在阅读的电子表格中的数据而有所不同。

当用户点击编辑按钮时,我需要能够确定FlexTable的行。为此,我尝试将行号添加到按钮作为标记和ID,并试图在下一个函数中获取被点击元素的值无济于事。我没有收到错误,但第二个函数中有一个空变量。

有没有办法在Google AppScripts中按下按钮的ID或标签的值?

以下是我的代码的相关部分。

function projectList(e){
  //spreadsheet and panel stuffs

  var projectsPanel = app.createFlexTable().setId("projectsList"); 
  var team = e.parameter.team.toString();

  var editProjectsHandler = app.createServerHandler("projectDetails");


  for (var i=1;i<topManSSData.length;i++){
    //for loop conditions to look up relevant data.

    var projectName = datafromSpreadsheet

    var editButton = app.createButton("edit").setId("editButton").addClickHandler(editProjectsHandler).setTag(i); 

    projectsPanel.setWidget(row,0,app.createHTML(projectName)).setWidget(row,1, editButton)
}                   

return app;   
}

//第二个函数的目的是获取按下的按钮的ID或TAG,这样我就可以使用数组函数查找与FlexTable中的行对应的数据。

function projectDetails(editbutton){
  var app = UiApp.getActiveApplication();

  var buttons = app.getElementById("editButton")
  var buttonid = buttons.getTag();               //here is where I am having prolems getting a value.  I get an empty value.

//etc.
return app;    
}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

实际上,这篇文章可能与您的问题相同:

Google Apps Script Find function caller id

也许你可以为每个按钮创建一个单独的点击处理程序:

var editButton = app.createButton("edit"+ i).setId("editButton"+i).addClickHandler(editProjectsHandler+i).setTag(i);

然后每个按钮都有自己的处理程序。这样,触发的任何处理程序都将直接与按钮相关联。

使用HTML,您可以使用this.id作为函数调用中的参数,但我不知道UI服务是否可以使用。

答案 1 :(得分:1)

the answer referenced in the other answer中所述,处理程序触发源的ID包含在e.parameter属性中。

您可以使用如下记录器轻松检查:

Logger.log(JSON.stringify(e));

如果每个按钮都有自己的ID,您将在处理函数中以e.parameter.source作为字符串获取此ID。您不需要在每个按钮上创建单独的处理程序。

在您的代码示例中使用如下:

for (var i=1;i<topManSSData.length;i++){
    //for loop conditions to look up relevant data.
    var projectName = datafromSpreadsheet
    var editButton = app.createButton("edit").setId("editButton"+i).addClickHandler(editProjectsHandler); 
    projectsPanel.setWidget(row,0,app.createHTML(projectName)).setWidget(row,1, editButton)
  }