2010-12-02 9 views

Antwort

0

Hier ist ein Beispiel, um ein ClickEvent in der Cloud zu erfassen. Dies ist jedoch ein Workaround, da sich die Bibliothek ändern kann. Da der Entwickler nicht anbietet, Ereignisse in der Cloud zu verwalten, auch nicht auf Tags, ist dies vielleicht aus einem guten Grund ...

Also verwenden Sie diesen Code auf eigene Gefahr. Bete für keine Änderung des Struktur-DOM des Widgets. Ich schlage vor, dass Sie dem Entwickler einige Verbesserungen an seinen Widgets stellen, wie das Verwalten solcher Ereignisse.

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());