0

Googleアプリでコーディングしようとしていますが、1つの問題が発生しました。たとえば、Google Webサイトのこのサンプルコードを考えてみましょう(リンクはこちらhttps://developers.google.com/apps-script/class_formpanel

 function doGet() {
 var app = UiApp.createApplication();
 var form = app.createFormPanel();
 var flow = app.createFlowPanel();
 flow.add(app.createTextBox().setName("textBox"));
 flow.add(app.createListBox().setName("listBox").addItem("option 1").addItem("option 2"));
 flow.add(app.createSubmitButton("Submit"));
 form.add(flow);
 app.add(form);
 return app;
 }

 function doPost(eventInfo) {
 var app = UiApp.getActiveApplication();
 app.add(app.createLabel("Form submitted. The text box's value was '" +
   eventInfo.parameter.textBox +
   "' and the list box's value was '" +
   eventInfo.parameter.listBox + "'"));
 return app;
  }

私の問題は、リストボックスで複数の値を選択したいということです。6行目を変更します

 flow.add(app.createListBox(true).setName("listBox").addItem("option 1").addItem("option 2"));

複数選択できるようにします。ただし、その結果、最後に選択された値のみが取得され、複数の選択ができなくなります。どうやら、それはsubmitButtonによるものです。さらなるコードで、アップロードファイルとlistBoxの複数選択を組み合わせたいので、formPanelを保持する必要があります。どうすれば修正できますか?大いに感謝する

4

2 に答える 2

0

これは、Issue Tracker、Issue 959の既知のバグです。にアクセスして、スターを付けて最新情報を入手してください。

サポートチームによって追加されたメモを信じるなら、2011 年 12 月から知られており、「取り組んでいます」。他のユーザーが回避策を提供しており、その修正版を以下に示します。

アイデアは、ListBox から選択されたすべての項目を受け取るハンドラー関数を ListBox にアタッチすることです。次に、ハンドラーはこれらの値をフォームの隠し要素に書き込みます。フォームが送信されるとdoPost()、hidden 要素を介して、選択リストが利用可能になります。

  ...
  var listbox = app.createListBox(true).setName("listBox").addItem("option 1").addItem("option 2");
  flow.add(listbox);

  // Issue 959 ListBox Workaround: http://code.google.com/p/google-apps-script-issues/issues/detail?id=959
  var listboxHidden= app.createHidden("listboxHidden", "").setId("listboxHidden");
  flow.add(listboxHidden);
  var fixListBoxHandler = app.createServerHandler('fixListBoxHandler');
  fixListBoxHandler.addCallbackElement(listbox);
  listbox.addChangeHandler(fixListBoxHandler);

  ...
}

function fixListBoxHandler(e) {

  var app = UiApp.getActiveApplication();
  app.getElementById('listboxHidden').setValue(e.parameter.listbox);
  return app;

}

注: 残念ながら、この回避策は時間に依存します。ハンドラが非表示の値を更新するのに数秒かかる場合があります。ハンドラーがジョブを完了する前に送信ボタンが押された場合、post() は、ハンドラーへの呼び出しの前に隠し要素にあったものを受け取ります。

于 2013-07-19T13:43:16.687 に答える