2010-08-09 4 views
23

के लिए प्रलेखन मैंने UiBuilder के साथ संयोजन में जीडब्ल्यूटी का उपयोग करना शुरू कर दिया। मैं कैसे आप GWT documentation में नीचे लिखा के रूप में @UiHandler(..) निर्देश का उपयोग कर सकते साधारण घटना संभाल कोड बनाने के लिए के बारे में थोड़ा हैरान हूँ:@UiHandler

@UiHandler("button") 
void handleClick(ClickEvent e) { 
    Window.alert("Hello, AJAX"); 
} 

इस मामले विधि handleClick प्रयोग किया जाता है। प्रत्येक जीडब्ल्यूटी विजेट के लिए आप कैसे जानते हैं @UiHandler के साथ कौन सी विधियां बनाई जा सकती हैं? कुछ के लिए आप doClose() विधि भी बना सकते हैं।

लेकिन उदाहरण के लिए, आप ListBox के साथ किसी आइटम को चुनने के लिए क्या उपयोग कर सकते हैं? दस्तावेज में कहां देख सकता हूं?

उत्तर

33

पैरामीटर जो आप @UiHandler एनोटेशन पर पास करते हैं वह उचित फ़ील्ड का नाम है जिसे आप *Handler असाइन करना चाहते हैं। इसलिए, इस मामले में आप ClickHandler को Button button पर निर्दिष्ट कर रहे हैं (वास्तव में, हम केवल फ़ील्ड का नाम जानते हैं)।

यह वास्तव में कैसे काम करता है - यह जीडब्ल्यूटी जादू का हिस्सा है :) मेरा अनुमान है कि, किसी भी अन्य यूआईबिंडर से संबंधित कोड की तरह (मुझे लगता है कि Google आईओ पर एक प्रस्तुति थी, जिसने यूआईबिंडर उत्पन्न कोड दिखाया), संकलन समय पर कंपाइलर आंकड़े कहां जाता है। इस उदाहरण में: हम एक Button button है, और हम एक @UiHandler एनोटेट विधि एक ClickEvent पैरामीटर है कि है -> कि मतलब चाहिए यह एक ClickHandler (सूचना है कि विधि का नाम मामला नहीं करता है) है। तो चलिए संकलन समय (कन्स्ट्रक्टर में, शायद) में कुछ कोड जोड़ते हैं जो उस हैंडलर को बटन में जोड़ता है। आप एक अधिक व्यापक जवाब में रुचि रखते हैं - स्रोत की जाँच: डी

लेकिन आप के साथ क्या उपयोग कर सकते हैं, उदाहरण के लिए, एक ListBox एक घटना एक आइटम का चयन किया जाता है पाने के लिए? दस्तावेज़ में जहां मैं इसे देख सकता हूं?

GWT API reference में। इस मामले में, आप शायद ListBox.addChangeHandler की तलाश में हैं। लेकिन आप आमतौर पर नहीं मिलेगा @UiHandler संबंधित कोड वहाँ - कि क्योंकि यह निरर्थक हो जाएगा है - आप हमेशा @UiHandler तरीकों उसी तरह का निर्माण:

  1. आप *Handler कि आप जोड़ना चाहते हैं की जाँच करें, कहना ChangeHandler
  2. यह एक void onChange(ChangeEvent event) है - हां, तो आपके विधि एक ChangeEvent पैरामीटर की जरूरत है और इस तरह दिखना चाहिए:

    @UiHandler("listBox") 
    void whateverName(ChangeEvent event) { 
        // ... 
    } 
    
+2

वाह, यह लगभग जादू की तरह लगता है। मैं वाइल्डकार्ड-तरह के व्यवहार के साथ खुद नहीं आया होता। – Roalt

+1

मैं Google IO 2010 और 200 9 (और यहां तक ​​कि 2008) से जीडब्ल्यूटी सत्र देखने की अनुशंसा करता हूं - जीडब्ल्यूटी टीम के सदस्य उस जादू के कुछ दिखाते हैं और समझाते हैं :) –

+0

किल्मर: टिप के लिए धन्यवाद। मुझे यकीन है कि ऐसा करो! – Roalt

1

शायद आपकी समस्या आपके ऑन मॉड्यूललोड मोड में है:

public void onModuleLoad() 
{  
    HelloWorld helloWorld = new HelloWorld("BOTAO"); 

    // Using this way @UiHandler will not work 
    //Document.get().getBody().appendChild(helloWorld.getElement()); 

    // correct way 
    RootPanel.get().add(helloWorld); 
} 
+0

धन्यवाद! मुझे सिरदर्द बचाया – Chaos