получить виджет по идентификатору в gwt - PullRequest
4 голосов
/ 31 октября 2011

У меня есть куча TextBox-ов, генерируемых динамически. На этапе создания я назначаю им свойство ID. например,

id = ...
Button b = new Button();
b.setText("add textbox");
b.addClickHandler(new Clickhandler() {
Textbox tb = new TextBox();
tb.getElement().setId(Integer.toString(id));
tb.setText("some text");
}
id += 1;

Мне нужно получить к ним доступ позже по их идентификаторам, но я не могу этого сделать. Я пытался использовать объект DOM для получения виджета, но он выдает исключение:

String id = "some id";
Element el = DOM.getElementById(id);
String value = el.getAttribute("value"); - this line produces an exception.

Я также пытался использовать el.getInnerText, el.getNodeValue - не повезло. Я вижу в отладчике Chrome - у текстовых полей нет свойства 'value'.

Ответы [ 3 ]

10 голосов
/ 18 июля 2012

вы можете получить виджет, связанный с элементом следующим образом:

public static IsWidget getWidget(com.google.gwt.dom.client.Element element) {
    EventListener listener = DOM
            .getEventListener((com.google.gwt.dom.client.Element) element);
    // No listener attached to the element, so no widget exist for this
    // element
    if (listener == null) {
        return null;
    }
    if (listener instanceof Widget) {
        // GWT uses the widget as event listener
        return (Widget) listener;
    }
    return null;
}
4 голосов
/ 31 октября 2011

Поскольку вы создаете свои текстовые поля в коде Java GWT, почему бы не поместить их в карту и получить к ним доступ позже?

1 голос
/ 01 ноября 2011

Следует помнить одну вещь: разницу между атрибутом и свойством в HTML / DOM. В вашем примере «значение» является свойством. Вы можете попробовать Element # getPropertyString. Раньше атрибуты и свойства использовались взаимозаменяемо, но в современных браузерах это уже не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...