Javascript 将面板小部件传递给函数

Javascript 将面板小部件传递给函数,javascript,google-apps-script,Javascript,Google Apps Script,我编写了一个相当复杂的脚本,它调用一个服务器处理程序来刷新网格中的元素,只需按下一个按钮 为了代码重用和行为一致,我希望在网格的初始绘制过程中直接调用该服务器处理程序 当通过单击按钮调用服务器处理程序时,所有预期的小部件都可用,并且可以使用e.parameter.widget等进行查询 当我直接调用函数并将panel变量传递给它时,e的值就是“AbsolutePanel” 是否有某种方法可以模拟addCallbackElement,将整个面板及其包含的所有小部件传递给函数 还是一种在脚本启动时自

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

为了代码重用和行为一致,我希望在网格的初始绘制过程中直接调用该服务器处理程序

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

当我直接调用函数并将panel变量传递给它时,e的值就是“AbsolutePanel”

是否有某种方法可以模拟addCallbackElement,将整个面板及其包含的所有小部件传递给函数

还是一种在脚本启动时自动启动服务器处理程序的方法

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

谢谢

托尼

函数doGet(){
var app=UiApp.createApplication();
var mainPanel=app.createAbsolutePanel();
var Monthsabr=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月];
变量日期=数组();
var周期=5;
var dateHidden=Array();
var dayOfMonth=新日期(((期间*28)+15887)*86400000);
var dateString='';
var dayOfWeek=0;

对于(var i=0;i而言,我可能需要像

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;
}
您可以使用复选框(
setVisible(false)
)在需要时触发事件,而无需任何用户操作,请参阅文档:“设置是否应选中复选框,并在值因此调用而更改时可选地触发事件。”


论坛上有一些这样的实现示例:或者

这正是我所寻找的解决方案,太棒了!谢谢!很高兴能提供帮助。(我非常喜欢这个技巧;-)谢谢。布莱恩,不幸的是,这个函数需要引用很多使用E.Value.WIDGET的小部件的值,所以我不确定这个解决方案会对我的情况有所帮助。瑟奇用隐藏的复选框触发事件的建议将很好地发挥作用。sonStringify(e)
不推荐使用:-)
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;
}