使用Tag在小部件之间使用GAS传递信息

时间:2014-07-24 07:10:43

标签: google-apps-script

我有一个包含有关事件数据的flextable。每行的第一个单元格包含一个按钮,其中包含对该事件的ID(即 btn_5_qaoebqiblqr9ss0182e7lrn89k@google.com ,其中 5 = rownumber和 qaoebqiblqr9ss0182e7lrn89k@google.com = eventId)。

function onClickShowEvent(e)
{ // Handle the event clicked in eventsTable

   var app = UiApp.getActiveApplication();      
   var btnDelete = app.getElementById(btn_deleteEvent);
   var eventId   = e.parameter.source;
   btn.setVisible(true).setTag(eventId);  // Tag will be set to     btn_5_qaoebqiblqr9ss0182e7lrn89k@google.com

  // Check if tag has been set
  var test = btn.getTag();
  Logger.log('eventId= ' + eventId + '   setTag succes= ' + (eventId == test));
   .....
}

事实证明,标签在这个阶段已经成功。

在按钮的eventhandler中,我想'告知'其他2个按钮(使用id btn_updateEvent和btn_deleteEvent)关于flextable中的哪个元素被选中,以便知道在点击按钮后必须处理什么事件。
我以为我可以使用标签,但它不起作用。

function onClickDeleteEvent(e)
{
var func = 'onClickDeleteEvent';
   var app      = UiApp.getActiveApplication();
   var source   = e.parameter.source;           // Will be btn_deleteEvent
   var btn      = app.getElementById(source);
   var eventId  = app.getElementById(wid_eventsTable).getTag(); // returns   eventId = null

Logger.log('in ' + func + '    source= ' + e.parameter.source + '   eventId= ' + eventId);

   return appLocal;
}  

但事实证明,getTag检索 null 怎么可能,我能做些什么来“传递”我需要的信息呢? 我想避免使用隐藏字段。

修改-1
如果我更改按钮的ID,则会收到错误。发生意外错误。

 var btnDelete = appLocal.getElementById('btn_deleteEvent');
 var infoEvent = bell + numRow + bell + event.getId(); // I use 'bell' for delimiting fields
 var newId = 'btn_deleteEvent' + infoEvent;
 btnDelete.setId(newId); 

因此,使用按钮名称提供信息的技巧也不起作用。

1 个答案:

答案 0 :(得分:0)

窗口小部件的TAG值在tagValue = e.parameter.widgetName_TAG

格式的eventInfo参数中可用作值

在你的情况下,这将是一个问题,因为按钮没有名称属性。我建议你使用另一种方法,比如另一个小部件上的标签或隐藏的小部件来存储你需要的信息。