0

Google Apps 脚本编写有点新,但我看到listBox该类的行为似乎很奇怪。这是脚本的更大片段:

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。列表框按预期从电子表格中的数据出现。不应该setId()方法将id标记添加到列表框中,就像它为name所做的那样(见下文)?

检查元素报告的列表框:

<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

这是我从 UiApp 看到并期望的行为,因为 Ui 的 html 并非旨在在应用程序本身之外进行操作。因此,id 对用户或应用程序开发人员没有意义。如果您想对应用程序的 html 进行更多控制,请避免使用 UiApp(尚未进一步开发)。

于 2013-10-06T22:32:22.767 回答