2014-07-16 36 views
1

您好同事GWT人。GWT FocusPanel clickHandler在使用元素創建時不起作用

在我使用GWT時,我遇到了FocusPanel未處理添加到它的clickEvent的問題。我不做GWT的標準方式,即使用UI綁定器或純Java代碼小部件構建GUI。我的主機GWT HTML文件是1個大文件,它具有表示內容「頁面」的div標記。我使用GWT來控制DOM。

我有這個HTML,我作爲FocusPanel的內容導入。

<div id="editCardsResponses"> 
    <div id="editCardsSuccess" class="success-box clickable"> 
     <span id="editCardsSuccessLabel">Your card was successfully deleted/edit/added.</span> 
     <span class="glyphicon glyphicon-remove"></span> 
    </div> 
... 
</div> 

下面的代碼...

RootPanel editCardsSuccess = RootPanel.get("editCardsSuccess"); 
FocusPanel editCardsSuccessPanel = new FocusPanel(editCardsSuccess); 
editCardsSuccessPanel.addClickHandler(new ClickHandler() { 
    public void onClick(ClickEvent event) { 
     hideWidget(editCardsSuccessPanel); 
     } 
    }); 

這並沒有工作,直到我這樣做...

final HTMLPanel editCardsSuccess = view.getEditCardsSuccess(); 
editCardsSuccess.addDomHandler(new ClickHandler() { 
    public void onClick(ClickEvent event) { 
     hideWidget(editCardsSuccess); 
    } 
}, ClickEvent.getType()); 

我甚至嘗試添加FocusPanel父DIV,認爲FocusPanel沒有附加到DOM,但這也沒有奏效。

RootPanel.get("editCardsResponses").add(editCardsSuccessPanel); 

我想用FocusPanel,如GWT要添加一個隱藏的輸入的DOM,在addtion給它包裝的元素。我假設隱藏的輸入處理一些跨瀏覽器問題,如果我只使用domHandler方法,可能會丟失。

任何人都可以幫助解釋爲什麼FocusPanel.ClickHandler不會生效,但附加的domHandler會?

如果DOM附件是問題,有沒有辦法重新附加被分離的元素/小部件?

如果我使用domHandler的方式......通過沒有獲取GWT FocusPanel小部件提供的隱藏輸入,我會失去什麼兼容性?

回答

1

沒有什麼不妥添加DOM處理您所描述的方式。它將適用於所有瀏覽器。

+0

啊很高興知道。我再讀一遍,發現添加的輸入是關鍵訪問:https://gwt.googlesource.com/gwt/+/master/user/src/com/google/gwt/user/client/ui/impl/ FocusImplStandard.java我的用例並不需要它,所以我現在堅持使用addDomHandler。乾杯! – jason

2

在元素上添加DOM ONCLICK處理程序事件。

示例代碼:

final Element desc = RootPanel.get("editCardsSuccess").getElement(); 
DOM.sinkEvents((com.google.gwt.user.client.Element) desc, Event.ONCLICK); 
DOM.setEventListener((com.google.gwt.user.client.Element) desc, new EventListener() { 
    @Override 
    public void onBrowserEvent(Event e) { 
     switch (DOM.eventGetType(e)) { 
      case Event.ONCLICK: 
       System.out.println("click"); 
       break; 
     } 
    } 
}); 
+0

這也有效。謝謝。我更喜歡addDomHandler方法,因爲它看起來更乾淨。 – jason

相關問題