ボタンを押すだけでサーバー ハンドラを呼び出してグリッド内の要素を更新する、非常に複雑なスクリプトを作成しました。
コードの再利用と一貫した動作のために、グリッドの最初の描画中にそのサーバー ハンドラーを直接呼び出したいと考えています。
ボタンをクリックしてサーバーハンドラーが呼び出されると、予想されるすべてのウィジェットが利用可能になり、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;
}