0

listBoxGoogle Apps のスクリプト作成は少し新しいのですが、クラスで奇妙な動作をしているように見えます。スクリプトのより大きなスニペットを次に示します。

var storeNameHandler = app.createServerHandler("newStoreHandler");
var storeNameLabel = app.createHTML("<BR /><B>Which store or site:</B>");
var LB_storeName = app.createListBox().setId('storeName').setName('storeName');
LB_storeName.addChangeHandler(storeNameHandler);
// Get the stores on the budget sheet.
var stores = budgetSheet.getRange("H2:H").getValues();
// add items to ListBox
LB_storeName.addItem("");
LB_storeName.addItem("NEW STORE/SITE");
stores.forEach(function(item){
    if(item!="") LB_storeName.addItem(item);
});

onChange ハンドラは次のとおりです。

function newStoreHandler(e) {
  var app = UiApp.getActiveApplication();
  var storeNameListBox = app.getElementById('storeName');
  storeNameListBox.setVisible(false);
  var newStoreNameInput = app.getElementById('newStoreName');
  newStoreNameInput.setVisible(true);
}

アイデアは、リストボックスを非表示にし、テキスト入力ボックスを同じ場所 (または可能であればそのすぐ下) に onChange で表示することです。ハンドラーにロジックを追加して、これが機能するようになったら、リストボックスの非表示/入力の表示イベントが発生する選択を決定します。

生成されたリストボックス要素を調べると、名前は表示されstoreNameますが、ID は表示されません。リストボックスは、スプレッドシートのデータから期待どおりに表示されます。name の場合と同様に、 setId()メソッドでidタグをリストボックスに追加するべきではありません(以下を参照)。

inspect 要素によって報告されたリストボックス:

<select class="gwt-ListBox" name="storeName">
  <option value=""></option>
  <option value="NEW STORE/SITE">NEW STORE/SITE</option>
  <option value="Costco">Costco</option>
  <option value="Amazon.com">Amazon.com</option>
  <option value="Woot.com">Woot.com</option>
</select>

IDが明確に欠落していることに注意してください。ただし、明らかに名前が設定されています。

4

1 に答える 1

1

これは、Ui の html がアプリ自体の外部で操作されるように設計されていないため、UiApp に見られる動作であり、期待される動作です。したがって、id はユーザーやアプリ開発者にとって重要ではありません。アプリの html をより細かく制御したい場合は、UiApp (これ以上開発されていません) は避けてください。

于 2013-10-06T22:32:22.767 に答える