我試圖讓jquery在使用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()的命名通知小部件(我認爲其中有一些) - 你不會一次隱藏所有的小部件;) – 2010-02-17 23:55:34
感謝您的評論。這絕不是最終的代碼,所以肯定有一些清理,但包含的想法是一個很好的。 DOM.createUniqueId()方法也可能是一個好主意,但是如果小部件在第一次點擊時關閉,那麼這並不重要。 我不知道我可以發佈更多的代碼。我有擴展這一個的子類,並添加他們自己的樣式,使它們看起來像一個錯誤或警告。 雖然我會用最新版本的代碼來編輯我的帖子。 – Josh 2010-02-18 00:39:36
我添加了更多代碼。創建通知實例時,我開始添加唯一標識,但仍需要2次點擊。我必須失去一些明顯的東西。 – Josh 2010-02-18 14:10:10