2010-06-20 14 views
8

पर क्लिकहैंडलर जोड़कर कहता है कि मेरे पास एक कस्टम विजेट है जिसमें क्लिकहैंडलर है। यहाँ उदाहरण है:जीडब्ल्यूटी एक डीओएम तत्व

public class TestWidget extends Composite { 

private static TestWidgetUiBinder uiBinder = GWT 
     .create(TestWidgetUiBinder.class); 

interface TestWidgetUiBinder extends UiBinder<Widget, TestWidget> { 
} 

@UiField 
Button button; 

public TestWidget(String firstName) { 
    initWidget(uiBinder.createAndBindUi(this)); 
    button.setText(firstName); 
} 

@UiHandler("button") 
void onClick(ClickEvent e) { 
    Window.alert("Hello!"); 
} 

}

जब मैं इस तरह इस विजेट को जोड़ने का प्रयास:

TestWidget testWidget = new TestWidget("myTestWidget"); 
    RootPanel.get().add(testWidget); 

सब कुछ ठीक है। अगर मैं अपने बटन पर क्लिक करता हूं तो मुझे वह संदेश मिलता है जो मैं उम्मीद करता हूं। लेकिन अगर मैं इस तरह जोड़ें:

TestWidget testWidget = new TestWidget("myTestWidget"); 
    RootPanel.getBodyElement().appendChild(testWidget.getElement()); 

मेरे क्लिक गतिविधि सक्रिय नहीं किया जा रहा है। मैं समझने के लिए struggeling क्यों हूँ। यह अच्छा होगा अगर कोई मुझे यह समझा सके या मुझे संसाधन से लिंक कर सके जहां मैं इसे पढ़ सकता हूं। अंततः मैं जानना चाहता हूं कि क्लिकहेंडर को जोड़ना संभव है या नहीं, मैंने बाद में बच्चे की घटना को जोड़ा और यदि इस तरह की सिफारिश की जाती है। धन्यवाद यह मदद के लिए अग्रिम।

कुकू

उत्तर

7

जब आप add() फोन, Widget.onAttach() विजेट है कि पैनल में जोड़ा जा रहा है पर कहा जाता है। घटनाओं को प्राप्त करने के लिए विजेट को पंजीकृत करने के लिए कुछ काम करता है। appendChild() बस एक डीओएम तत्व को दूसरे से जोड़ता है और कुछ और नहीं करता है। आप ऐसा करने से दूसरे मामले में काम कर रहा घटनाओं प्राप्त करने के लिए सक्षम होना चाहिए:

Element element = testWidget.getElement(); 
RootPanel.getBodyElement().appendChild(element); 
DOM.sinkEvents(element, 
    Event.getTypeInt(ClickEvent.getType().getName()) 
    | DOM.getEventsSunk(element); 

हालांकि, मैं इस परीक्षण नहीं किया है और मैं सिफारिश नहीं होता है कि आप एक असली आवेदन में इसका इस्तेमाल करते हैं। add() का उपयोग करना निश्चित रूप से पसंदीदा है, appendChild() का उपयोग इस तरह से कोई फायदा नहीं है और इससे अप्रत्याशित व्यवहार हो सकता है।

संबंधित मुद्दे