我正在尝试使用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;
}
非常感谢任何帮助!
答案 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)
}