neskow
neskow

Reputation: 3

Unable to use list box with server handler to change text of label

If the title is confusing, hopefully this makes it more clear what I'm trying to do:

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);
}

It doesn't call any errors. If I intentionally put an error in foo, I get an error message, so I'm assuming the handler is getting called and just isn't doing anything. This works in a spreadsheet if I just have it bring up a Browser.msgBox(value), so I know that much works.

I'm trying to use this in a program that will automatically update all the listboxes on the page based on what is selected in the first listbox. I've been able to change things like visibility using server handlers and app.getElementById, but only with radio buttons, not a list box. I'm clearly doing something wrong here, but it's not obvious what that is.

Upvotes: 0

Views: 956

Answers (1)

Henrique G. Abreu
Henrique G. Abreu

Reputation: 17772

To have your changes to the UiApp updated you have to return the app on your handler, e.g.

  //...
  label.setText(value);
  return app;
}

Upvotes: 4

Related Questions