1つのボタンごとに複数のハンドラーを作成できます。
for (i=1,...) {
var handler = app.createServerHandler("buttonAction" + i);
app.createButton(...).setId(i).addClickHandler(handler);
}
function buttonAction1() {
// code to handle button 1
}
function buttonAction2() {
// code to handle button 2
}
function buttonAction...
ただし、後でどのactionXが何を実行するかを思い出すのに問題が発生する可能性があるため、このような「匿名」アクションハンドラーを使用することはお勧めしません。
(たとえば、ループを使用するなど、別のアプローチを使用するか、そのループの前に意味のあるハンドラー名の辞書のような/配列オブジェクトを準備します。)
OTOH、コールバック関数に提供されたイベントオブジェクト引数を使用できます。
function buttonAction(event) {
// use event object here to identify where this event came from
}
上記のevent
オブジェクトプロパティは、コールバックがどこから呼び出されているかによって異なります。たとえば、フォームがある送信ボタンの場合、次のように送信されたパラメータにアクセスできますevent.parameter.myParamName
。こちらのコードサンプルをご覧ください。
したがって、ボタンの数が可変の場合は、非表示の要素とボタンを使用できます。
for (i=1,...) {
var hiddenAction = app.createHidden("action", "action"+i);
var handler = app.createServerHandler("buttonAction");
handler.addCallbackElement(hiddenAction);
var btn = app.createButton("Button text", handler);
// you'll need to add both btn and hidden field
// to the UI
app.add(hiddenAction);
app.add(btn);
}
次に、次のbuttonAction
ようになります。
function buttonAction(e) {
var action = e.parameter.action;
// do something based on action value here
// which will be one of "action1", "action2", ...
}
上記は、隠しクラスのサンプルからのコピー&ペーストです。
上記はそのままでは機能しないかもしれませんが、アイデアは得られます。コールバックで必要な情報を保持する非表示の要素を作成し、その非表示をサーバーハンドラーにアタッチします。複数の非表示要素またはフォームパネルを作成することもできます。