0

如果标题令人困惑,希望这能让我更清楚我想要做什么:

function doGet(e) {
  var app = UiApp.createApplication();

  var list = app.createListBox().setName('list');
  list.addItem("this");
  list.addItem("that");
  list.addItem("they");

  var handler = app.createServerHandler('foo').addCallbackElement(list);
  list.addChangeHandler(handler);

  var label = app.createLabel("test").setId('label');

  var panel = app.createVerticalPanel();
  panel.add(list); 
  panel.add(label);
  app.add(panel);

  return app;
}​

function foo(e) {
  var app = UiApp.getActiveApplication();
  var value = e.parameter.list;
  var label = app.getElementById('label');
  label.setText(value);
}

它不会调用任何错误。如果我故意在 中输入错误foo,我会收到一条错误消息,因此我假设处理程序正在被调用并且没有做任何事情。如果我只是让它显示一个电子表格,这可以在电子表格中使用Browser.msgBox(value),所以我知道这很有效。

我正在尝试在一个程序中使用它,该程序将根据在第一个列表框中选择的内容自动更新页面上的所有列表框。我已经能够使用服务器处理程序和 更改诸如可见性之类的东西app.getElementById,但只能使用单选按钮,而不是列表框。我显然在这里做错了什么,但不清楚那是什么。

4

1 回答 1

4

要更新对 UiApp 的更改,您必须在处理程序上返回应用程序,例如

  //...
  label.setText(value);
  return app;
}
于 2012-06-02T03:10:13.233 回答