ウィジェット値にアクセスするには、それらを処理するサーバー ハンドラにコールバック要素 (または親パネル) として追加する必要があります。各ウィジェットの値は、ハンドラー関数に渡されたパラメーターに設定され、name
(既に設定した) ウィジェットによって参照できます。
setId
別の回答で提案されているようにする必要はありません。ウィジェット自体 (およびその値ではない) で何かをしたい場合を除きます。たとえば、テキストを変更したり、非表示にしたりします。
var textBoxes = ["first", "second", "third"];
function example() {
var app = UiApp.createApplication().setTitle('Test');
var panel = app.createVerticalPanel();
textBoxes.forEach(function(name){
panel.add(app.createLabel(name + " mail"));
panel.add(app.createTextBox().setName(name));
});
panel.add(app.createLabel('Example Label').setId('label').setVisible(false));
var handler = app.createServerHandler('btnHandler').addCallbackElement(panel);
panel.add(app.createButton('Click').addClickHandler(handler));
SpreadsheetApp.getActive().show(app.add(panel));
}
function btnHandler(e) {
var app = UiApp.getActiveApplication(),
allEqual = true;
for( var i = 1; i < textBoxes.length; ++i )
if( e.parameter[textBoxes[i-1]] !== e.parameter[textBoxes[i]] ) {
allEqual = false; break;
}
app.getElementById('label').setVisible(allEqual);
return app;
}
はすぐには実行されServerHandlers
ないため、ボタンをクリックしてからラベルが表示または非表示になるまでに数秒かかる場合があります。