0

我编写了一个非常复杂的脚本,它调用服务器处理程序,只需按下按钮即可刷新网格中的元素。

对于代码重用和一致的行为,我想在网格的初始绘制期间直接调用该服务器处理程序。

当通过单击按钮调用服务器处理程序时,所有预期的小部件都可用并且可以使用 e.parameter.widget 等进行查询。

当我直接调用该函数并将其传递给面板变量时,e 的值只是'AbsolutePanel'。

有什么方法可以模拟将整个面板及其包含的所有小部件传递给函数的 addCallbackElement 方式?

或者一种在脚本启动时自动触发服务器处理程序的方法?

请原谅下面的任何语法错误,我已将 500 行代码删减到相关位!

谢谢

托尼

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

  var mainPanel = app.createAbsolutePanel();

  var monthsAbbr = ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.'];

  var Dates = Array();
  var period = 5;
  var dateHidden = Array();
  var dayOfMonth = new Date(((period * 28) + 15887) * 86400000);
  var dateString = '';
  var dayOfWeek = 0;
  for (var i=0; i<84; i++) {
     dateString = dayOfMonth.getDate() + ' ' + monthsAbbr[dayOfMonth.getMonth()] + ' ' + (dayOfMonth.getFullYear() - 2000);
    Dates [i] = dateString;
    dateHidden[i] = app.createHidden('dates'+i, dateString).setId('dates'+i);
    mainPanel.add(dateHidden[i]);
    dayOfMonth = new Date(dayOfMonth.getTime() + 86400000);
 }

 var buttonReset = app.createButton('Reset').setId('buttonReset');

 var handlerChange = app.createServerHandler('myHandlerChange');
 handlerChange.addCallbackElement(mainPanel);

 mainPanel.add(buttonReset.addChangeHandler(handlerChange));

 app.add(mainPanel);

 myHandlerChange(mainPanel);

 return app;
}


function myHandlerChange(e) {
var app = UiApp.getActiveApplication();
Logger.log('Here are the widgets passed into the function: ' + Utilities.jsonStringify(e));

return app;
 }
4

2 回答 2

0

可能想要一些东西,比如......

function doGet {
  ...
  myHandlerChange();  // DON'T PASS THE UI WIDGET ITSELF 
  return app;
}


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

  if (e) { // DO SOMETHING WHEN 'e' EXISTS
    Utilities.jsonStringify(e));
  } 
  else { //  DO SOMETHING AT THE START, WHEN 'e' DOESN'T EXIST
    app.getElementById('dates0').setText('something');
  }

  return app;
}
于 2013-10-31T03:51:50.230 回答
0

您可以在需要时使用 checkBox ( setVisible(false)) 来触发事件,而无需任何用户操作,请参阅此处的文档:“设置是否应检查 CheckBox 并在值因此调用而更改时选择性地触发事件。 "

这种实现的论坛上有几个例子:herehere

于 2013-10-31T08:15:29.320 回答