2011-09-21 32 views
6

Tôi về cơ bản có một menu nơi bạn không thể nhấp vào tiêu đề, nhưng khi bạn di chuột qua mục menu bạn có thể chọn từ các phần tử thả xuống. Mỗi phần tử là g: Các thẻ neo với các trường ui được liên kết với chúng. Điều tôi mong đợi sẽ xảy ra, là khi người dùng nhấp vào một trong các phần tử thả xuống, uiHandler của tôi cho trường đó sẽ kích hoạt. Ngay cả với gỡ lỗi trên và một điểm break nó không bao giờ trúng.GWT UiHandler cho g: Neo không bắn

Dưới đây bạn sẽ tìm thấy các lĩnh vực quan tâm chính trong mã. Tôi sẽ chỉ đăng nhập gwt của tôi ở đây, vì nó có thể được giả định phần còn lại là chính xác do lỗi số không.

Dưới đây là một đoạn XML để có được một ý tưởng về những gì đang xảy ra

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
      xmlns:g='urn:import:com.google.gwt.user.client.ui' 
      xmlns:cpcw='urn:import:org.collegeboard.pa.gwt.client.widget'> 
    <cpcw:ExtendedHTMLPanel> 
     <ul> 
      <li ui:field="juniorHigh"><g:Anchor href="">Junior High</g:Anchor> 
      <ul> 
       <li><g:Anchor href="#" ui:field="juniorHighFall">Fall</g:Anchor></li> 
       <li><g:Anchor href="#" ui:field="juniorHighSpring">Spring</g:Anchor></li> 
       <li><g:Anchor href="#" ui:field="juniorHighSummer">Summer</g:Anchor></li> 
      </ul> 
     </li> 
    </ul> 
    </cpcw:ExtendedHTMLPanel> 
</ui:UiBinder> 

Và sau đó đây là những mảnh từ lớp Java của tôi

nhập khẩu

import com.google.gwt.core.client.GWT; 
import com.google.gwt.dom.client.LIElement; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.uibinder.client.UiBinder; 
import com.google.gwt.uibinder.client.UiField; 
import com.google.gwt.uibinder.client.UiHandler; 
import com.google.gwt.user.client.ui.Anchor; 

Ui Fields

@UiField 
protected LIElement juniorHigh; 

@UiField 
protected Anchor juniorHighFall; 

@UiField 
protected Anchor juniorHighSpring; 

@UiField 
protected Anchor juniorHighSummer; 

Ui Handler

@UiHandler({"juniorHighFall","juniorHighSpring","juniorHighSummer"}) 
public void handleMenuClick(ClickEvent event) 
{ 
    DisplayUtil.displayAlertMessage(event.toString()); 
} 

Initialize

@Override 
public void initializeBinder() 
{ 
    initWidget(ourUiBinder.createAndBindUi(this)); 
} 

Bây giờ, UiHandler không bao giờ thực sự được nhấn. Tôi đã có g: Anchor tags có và không có href, và cũng đã thử chúng như g: Hyperlink và g: Button không thành công. Như thể UiHandler không có ở đó.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều và nếu bạn cảm thấy bạn cần bất kỳ điều gì khác để khắc phục sự cố, vui lòng cho tôi biết !!

Cảm ơn :-)

EDIT:

Chỉ cần chắc chắn rằng đây là rõ ràng, các tập tin mẫu ui.xml có chứa tập tin ui.xml này là đặt điều này trong một div. Khi tôi thay thế bằng SimplePanel, mọi thứ đã hoạt động với UiHandler.

Cảm ơn bạn đã trả lời!

Trả lời

6

Tính năng này và sẽ hoạt động như bạn có theo mặc định.

tôi đã nhận thấy:

  • tài liệu tham khảo Mã của bạn "ourUiBinder"
  • điều khiển của bạn sẽ được bọc trong một "ExtendedHTMLPanel"

Những vẻ như các lớp học tùy chỉnh - có lẽ một cái gì đó sôi nổi đang diễn ra trong những triển khai đó?

Có thể bạn có thể thử gói các neo đó trong SimplePanel và sử dụng UiBinder mặc định và xem nó có hoạt động hay không. Nếu có, rất có thể đó là điều cần làm với bất kỳ điều khiển tùy chỉnh nào bạn sử dụng. Nếu nó không sau đó một cái gì đó kỳ lạ đang xảy ra - có thể khởi động lại IDE của bạn, vv

+0

Vâng, chúng là các lớp tùy chỉnh và tôi sẽ bắt đầu đào sâu vào chúng để xem có điều gì đó thú vị xảy ra với chúng hay không. Cảm ơn bạn vì sự bảo đảm rằng mã nên hoạt động, bởi vì điều đó đã khiến tôi lên tường! Tôi cũng sẽ cung cấp cho SimplePanel một shot để xem điều đó có thực hiện thủ thuật hay không! Cảm ơn vì sự trả lời! –

+0

Ngoài ra, tôi sẽ upvote này, nhưng tôi không có đủ danh tiếng trên đây chưa làm như vậy ... (╯ ° □ °) ╯︵ ┻━┻ –

+0

SimplePanel đã làm các trick! Trên mẫu xml mà có chứa ExtendedHTMLPanel này, các phần tử là divs.Tôi đã thay đổi các div thành SimplePanels và tất cả các UiHandlers đều hoạt động bình thường.Tôi vẫn không có đủ danh tiếng để upvote câu trả lời của bạn, nhưng cảm ơn bạn! :) –

2

Tệp xml mẫu có mỗi chế độ xem chứa trong phần tử div.Filip-fku khuyên tôi nên xem xét SimplePanels cho mã mà tôi đã đăng, điều này khiến tôi nhìn vào tệp mẫu cũng như thấy chúng không phải là các thùng chứa GWT, chúng là các div. Ngay sau khi tôi làm cho họ SimplePanels UiHandlers của tôi làm việc như một say mê!

Cảm ơn bạn Filip-fku! g: SimplePanel FTW !!!