2011-12-30 3 views
0

내 앱에서 & 개의 하이퍼 링크 드롭을 처리하고 싶습니다. 하이퍼 링크는 어디에 있든 상관 없으므로 setDragable(true)setData("link", "the URL")으로 표시 할 수 없습니다.GWT에서 하이퍼 링크 끌어서 놓기 처리 방법

매우 유사한 시나리오는 & 이미지를 이미지 상자에 끌어다 놓을 수있는 이미지로 Google 이미지 검색을 사용하는 것입니다.

샘플 코드,

 
Label lblDropLink = new Label("Drop a link here"); 
lblDropLink.addDragOverHandler(new DragOverHandler() { 

    @Override 
    public void onDragOver(DragOverEvent event) { 
     lblDropLink.setText("Drop here to add the link."); 
     lblDropLink.setStyleName("dragOverFade"); 
    } 
}); 
lblDropLink.addDropHandler(new DropHandler() { 

    @Override 
    public void onDrop(DropEvent event) { 
     event.preventDefault(); 

     // QUESTION: how to get the link, and even its text? 
    } 
}); 

감사합니다!

답변

0

유일한 것은 URL입니다 얻을!

event.getData(format) 방법으로 전화를 걸 수 있습니다.

format은 "텍스트"또는 "url"이 될 수 있습니다 (dom-datatransfer-getdata 참조). 그것을 테스트 할 때 "text"와 "url"은 항상 동일한 결과를 전달합니다.

그래서 "// QUESTION : 링크를 얻는 방법 및 텍스트?"

final Label lblDropLink = new Label(defaultText); 
    lblDropLink.addDragOverHandler(new DragOverHandler() { 

     @Override 
     public void onDragOver(DragOverEvent event) { 
      lblDropLink.setText(dragOverText); 
     } 
    }); 

    lblDropLink.addDropHandler(new DropHandler() { 

     @Override 
     public void onDrop(DropEvent event) { 
      event.preventDefault(); 

      RootPanel.get().add(new Label("Dropped source formated with \"text\": " + event.getData("text"))); 
      RootPanel.get().add(new Label("Dropped source formated with \"url\": " + event.getData("url"))); 
     } 
    }); 

    RootPanel.get().add(lblDropLink); 
} 

: 두

  • event.getData ("텍스트")
  • event.getData ("URL") 여기

약간의 샘플 prgramm입니다 중 하나입니다 그게 다야 ...

+0

Thanks @Stefan. 이것은 URL을 얻는 데 효과적입니다. 그러나 event.getData ("text")는 텍스트가 아닌 URL도 반환합니다. 그걸 바꾸는 어떤 방법이 있니? – ShuaiYuan

+0

죄송합니다, 이유를 찾을 수 없지만 같은 문제가있었습니다. 내가 그것을 볼 때, 링크 드레싱 때, URL 만 드래그 정보에 .... 또한 다른 분야에서 내 형식 (형식은 기본적으로 키 값 쌍을 가리키는 정의 할 찾을 수 없습니다 ... = – Stefan

+0

표준이 구현 된 방법이라고 생각합니다. 나중에 주류 브라우저가 __text__와 __url__을 모두 제대로 지원할 것입니다. 지금 대답 해 주시면 감사하겠습니다. @Stefan. – ShuaiYuan

0

getSource()이라는 기능이 있습니다. 이를 사용하여 드래그 된 객체의 소스를 캐스팅하고 onDrop 이벤트에서 소스 객체의 링크 속성을 가져옵니다.

예 :

public void onDrop(DropEvent event) { 
    event.preventDefault(); 
    Link link = (Link)event.getSource(); 
} 

링크 드래그되는 객체이다. 그런 다음 Link.getLink() 또는 링크 값을 얻기 위해 사용하는 모든 것을 호출 할 수 있습니다.

Hpope 당신은 개념 : 링크를 삭제 할 때 당신이 얻을 수있는

+0

사실이 아닙니다. event.getSource()를 디버깅하려고하면 "Link"가 아니라 실제로 Label 객체임을 알 수 있습니다. – ShuaiYuan

+0

이 링크를 확인하십시오 : http://forums.smartclient.com/showthread.php?t=3432 –