Я пытаюсь получить jquery для выполнения некоторых атак ui для меня при использовании GWT. У меня есть уведомления, которые я добавляю на страницу, которая при нажатии должна исчезнуть. Поскольку может быть несколько уведомлений одного типа (предупреждение, ошибка и т. Д.), Я пытаюсь динамически добавлять имя стиля только тогда, когда их щелкают через GWT, а затем активируют jquery для этого имени класса.Получение JQuery для работы над именем класса, динамически добавленным GWT
Проблема заключается в том, что функция jquery запускается до того, как имя стиля можно добавить, чтобы пользователь дважды щелкнул уведомление, чтобы закрыть его.
Любые идеи?
public abstract class AbstractNotificationWidget extends Composite implements ClickHandler, HasClickHandlers {
protected abstract String getUniqueId();
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return addDomHandler(handler, ClickEvent.getType());
}
@Override
public void onClick(ClickEvent event) {
doClick(getUniqueId());
}
protected static native void doClick(String name) /*-{
$wnd.$("#" + name).click(function() {
$wnd.$(this).slideUp("slow");
$wnd.$("div", this).fadeOut("slow");
});
}-*/;
}
Я тогда подклассы, которые расширяют класс выше
public class ErrorNotificationWidget extends AbstractNotificationWidget {
private final String uniqueId;
public ErrorNotificationWidget (String title, String message) {
uniqueId = DOM.createUniqueId();
initWidget(uiBinder.createAndBindUi(this));
this.getElement().setId(uniqueId);
this.addClickHandler(this);
}
@Override
protected String getUniqueId() {
return this.uniqueId;
}
Эти подклассы используют UiBinder, чтобы определить, каким образом они должны быть сделаны. Затем эти виджеты добавляются в панель, которая будет отображаться.
Не могли бы вы предоставить еще несколько исходных кодов - часть, которую вы опубликовали, недостаточно точна, чтобы понять, что происходит не так. И вы можете захотеть изменить 'styleName.equals' на' styleName.contains';) Кроме того, было бы проще просто использовать 'FocusPanel' как ваш' mainWidget', чем обрабатывать регистрацию 'ClickHandler' самостоятельно. И вы можете захотеть чтобы переключиться на именование виджетах уведомлений (я предполагаю, что их будет несколько) на DOM.createUniqueId() - вы не сокрываете сразу все виджеты;) –
Спасибо за комментарий. Это не окончательный код, так что есть определенная очистка, но идея содержит хороший. Метод DOM.createUniqueId(), вероятно, тоже хорошая идея, но если виджет закрывается при первом щелчке, это не имеет значения. Я не уверен, какой еще код я мог бы разместить. У меня есть подклассы, которые расширяют этот и добавляют свои собственные стили, чтобы они выглядели как ошибка или предупреждение. Я отредактирую свое сообщение с самой последней версией кода с вашими предложениями. – Josh
Я добавил еще код. Я начал добавлять уникальный идентификатор, когда экземпляр уведомления был создан, но для него все еще требуется 2 клика. Я должен упустить что-то очевидное. – Josh