Wie Click-Ereignis oder ein anderes Ereignis in GWT Wolke behandeln?
Frage
Ich bin mit tagcloud_0.4.jar für die Verwendung von Tag Cloud in GWT. Nun, wenn ich in dem Tag-Cloud auf jeden Tag klicken, dann, wie kann ich dieses Ereignis behandeln oder wie kann ich RPC-Aufruf zu tun, wenn der Benutzer eines beliebigen Tag von Wolke aus?
Danke.
Lösung
Hier ist ein Beispiel einer ClickEvent auf der Wolke zu fangen. Aber das ist eine Abhilfe, wie die Bibliothek ändern kann. Da die developper bieten nicht Ereignisse auf der Wolke verwalten weder auf Tags, dann ist dies vielleicht aus gutem Grund ...
verwenden also diesen Code auf eigene Gefahr. Beten Sie für keine Änderung der Struktur DOM des Widgets. Ich schlage vor, Sie die developper einige Verbesserungen auf seine Widgets zu fragen, wie solche Ereignisse zu verwalten.
final TagCloud cloud = new TagCloud();
cloud.addWord(new WordTag("AAA"));
cloud.addWord(new WordTag("AAA"));
cloud.addWord(new WordTag("BBB"));
cloud.addWord(new WordTag("CCC"));
cloud.addWord(new WordTag("CCC"));
cloud.addWord(new WordTag("CCC"));
cloud.addDomHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// Prevent the click from the tag to be executed
event.preventDefault();
Element e;
// For each tag present in the cloud, look for the one that is triggered
for (int i = 0; i < cloud.getTags().size(); ++i) {
// Gets the element in the cloud, this really is the unsafe part of the code
// if the developer change the dom of its widget
e = DOM.getChild(DOM.getChild(cloud.getElement(), 0), i);
// Is the current element targeted by the event?
if (event.getClientX() >= e.getOffsetLeft() && event.getClientY() >= e.getOffsetTop()
&& event.getClientX() <= e.getOffsetLeft() + e.getOffsetWidth()
&& event.getClientY() <= e.getOffsetTop() + e.getOffsetHeight()) {
// Gets the abstract tag
Tag t = cloud.getTags().get(i);
// Gets tag descendant
if (t instanceof WordTag) {
// Do what you want with your WordTag, maybe an RPC call
} else if (t instanceof ImageTag) {
// Do what you want with your ImageTag, maybe an RPC call
}
break;
}
}
}
}, ClickEvent.getType());