क्या जीडब्ल्यूटी नोड में अटैच इवेंट को संभालने का कोई तरीका है? मुझे लगता है कि मैं ऐसा कर सकता था:
Node myDiv = DOM.createDiv();
Magic.setOnAttachEventListener(myDiv, new EventListener() {
@Override
public void onEvent(Event event) {
// ...
}
}
जब मैं ऐसा कुछ करता हूं तो हैंडलर को बुलाया जाना चाहिए,
parent.appendChild(myDiv);
यह देखते हुए कि parent
स्वयं संलग्न है, अर्थात, यह वर्तमान विंडो में प्रदर्शित होता है।
4 जवाब
मैं अपना दूसरा उत्तर पोस्ट करता हूं क्योंकि अब मुझे पता है कि आप माता-पिता में डीआईवी कैसे जोड़े जाते हैं, इसे बदल नहीं सकते हैं।
कुछ खोज के बाद मुझे म्यूटेशन इवेंट मिले। वे आपको DOMNodeInserted
ईवेंट सुनने की अनुमति देते हैं:
जेएस:
myDiv.addEventListener("DOMNodeInserted", function (ev) {
alert('added');
}, false);
जीडब्ल्यूटी में आपको जेएसएनआई विधि का उपयोग करने की आवश्यकता है:
private native void addListener(Element elem) /*-{
elem.addEventListener("DOMNodeInserted", function (ev) {
$wnd.alert('added');
}, false);
}-*/;
यह काम करता है, लेकिन ... इसे बहिष्कृत किया गया है। आपको इसके बजाय MutationObserver का उपयोग करना चाहिए।
दुर्भाग्य से MutationObserver
में NodeInserted घटना नहीं देखी जा सकती है। मैंने सोचा था कि subtree
म्यूटेशन ऑब्जर्वेशन काम करेगा लेकिन यह मेरे काम नहीं आया। समाधान माता-पिता पर childList
उत्परिवर्तन का निरीक्षण करना है:
जेएस:
// create an observer instance
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
alert(mutation.type);
});
});
// configuration of the observer:
var config = {
childList: true
};
// pass in the target node, as well as the observer options
observer.observe(elem, config);
और, फिर से, जीडब्ल्यूटी के लिए आपको इसे जेएसएनआई विधि में लपेटना होगा (आप जानते हैं कि कैसे)।
ऑब्जर्वर कॉलबैक में mutation
पैरामीटर एक MutationRecord है। वस्तु।
इसलिए, यदि आप माता-पिता को प्राप्त कर सकते हैं, तो उस पर MutationObserver का उपयोग करें और childList
उत्परिवर्तन का निरीक्षण करें। यदि नहीं, तो बहिष्कृत उत्परिवर्तन घटनाओं का उपयोग करने का प्रयास करें।
मुझे पता है कि यह शुद्ध जीडब्ल्यूटी समाधान नहीं है, लेकिन आप घटना या उत्परिवर्तन को संभालने के लिए जीडब्ल्यूटी विधियों का उपयोग कर सकते हैं। आपको बस जीडब्ल्यूटी विधि फॉर्म जेएसएनआई को इस तरह कॉल करने की आवश्यकता है:
[instance-expr.]@class-name::method-name(param-signature)(arguments)
आपको JSNI की सभी जानकारी GWT प्रलेखन में मिलेगी।
GWT के सभी Widget
पहले से ही HasAttachHandlers इंटरफ़ेस। यदि आपको इस कार्यक्षमता की आवश्यकता है, तो आप नोड के बजाय विजेट का उपयोग करना बेहतर समझ सकते हैं।
आप SimplePanel
या HTMLPanel
का उपयोग कर सकते हैं क्योंकि दोनों ही इसकी सामग्री के लिए DIV
का उपयोग करते हैं।
पैनल्स पर आप addAttachHandler
मेथड को कॉल कर सकते हैं।
यदि आपको Element
की आवश्यकता है तो आप पैनल पर getElement()
विधि को कॉल कर सकते हैं।
यह विधि केवल तभी काम करती है जब आप myDiv
को पैनल के रूप में संलग्न करते हैं, इसलिए इसके बजाय
parent.appendChild(myDiv);
तुम्हें यह करना चाहिए
HTMLPanel.wrap(parent).add(myDiv);
यहाँ एक उदाहरण कोड है:
Element parent = RootPanel.getBodyElement();
SimplePanel myDiv = new SimplePanel();
// use it as Panel
myDiv.add(new Label("Hello!"));
// or use it as an element
myDiv.getElement().setInnerText("Hello 2!");
myDiv.addAttachHandler(new Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
Window.alert("Attached");
}
});
// parent.appendChild(myDiv.getElement()); // this will not fire the AttachEvent
HTMLPanel.wrap(parent).add(myDiv); // this will fire the AttachEvent
"मतदान" विकल्प भी है जो बहुत प्रभावी नहीं हो सकता है लेकिन आसान हो सकता है, देखें https://stackoverflow.com/a/850995/938899 .
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।