Идентификатор виджета GWT и стандарт HTML - PullRequest
0 голосов
/ 03 декабря 2011

У меня есть собственный виджет (OrderItem) в проекте GWT. Этот виджет имеет TextBox. Я установил его идентификатор "Navid". Но что если я создам несколько экземпляров OrderItem на панели? Идентификатор будет повторен тогда. Это сделает HTML недействительным.

Как назначить уникальный идентификатор для TextBox?

Ответы [ 2 ]

6 голосов
/ 04 декабря 2011

Ну, как правило, виджеты GWT генерируют свои собственные идентификаторы, которые автоматически становятся уникальными, и вы обычно не беспокоитесь о том, что это за идентификатор. Когда вы говорите, что устанавливаете идентификатор TextBox, я предполагаю, что вы вызываете что-то вроде myTextBox.getElement().setId("Navid").

Есть два простых метода, которые я могу придумать, в зависимости от вашего варианта использования. Класс HTMLPanel имеет статический метод createUniqueId (), который вы можете использовать как самостоятельно, так и для простого создания уникального идентификатора. Как myTextBox.getElemement().setId("Navid-" + HTMLPanel.createUniqueId()). Единственная проблема заключается в том, что сгенерированный идентификатор не является детерминированным.

Другим распространенным методом будет генерирование идентификатора на основе идентификатора родительского виджета. myTextBox.getElement().setId("Navid-" + myTextBox.getParent().getElement().getId()).

Тем не менее, я собираюсь сделать предположение и предположить, что причина, по которой вы хотите назначить свой собственный идентификатор для этого виджета, заключается в том, что вы можете обращаться к нему вне вашего кода GWT, из Javascript, например, из JQuery. В этом случае я бы порекомендовал вместо присвоения ему идентификатора (который должен быть уникальным, чтобы быть полезным) вместо назначения имени класса html элементу виджета. Затем вы должны обратиться к элементу виджета относительно идентификатора или класса идентификатора или класса вашего OrderItem. Вы можете добавить html-имя класса к элементу, как в примере myTextBox.getElement().addStyleName("navid")

Итак, предполагая, что вы присваиваете HTML-класс orderItemWidget корневому HTML-элементу вашего виджета OrderItem, а HTML-класс navid - TextBox, вы можете ссылаться на текстовое поле из JQuery с помощью селектора ".orderItemWidget .navid"

2 голосов
/ 04 декабря 2011

Вот почему GWT не позволяет легко установить идентификатор для виджета.Для стилей это значительно упрощает использование имен классов CSS.На самом деле, существует очень мало причин для использования идентификатора для начала, и почти нет причин для динамически генерируемых вещей (например, виджетов).

Теперь, чтобы ответить на ваш вопрос, браузеры допускают случай, когда несколько элементов имеют одинаковыйID и getElementById определяется для возврата первого из этих элементов (в порядке документа)

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