我编写了一个非常复杂的脚本,它调用服务器处理程序,只需按下按钮即可刷新网格中的元素。
对于代码重用和一致的行为,我想在网格的初始绘制期间直接调用该服务器处理程序。
当通过单击按钮调用服务器处理程序时,所有预期的小部件都可用并且可以使用 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;
}