2016-12-15 12 views
0

저는 GXT (GWT/GWTP)에 대해 매우 익숙합니다. 패널이 포함 된 모달 대화 상자가 표시 될 때 GXT (4.0) [custom] 위젯을 느리게로드 할 수 있는지 알고 싶습니다 (처음에는 대화 상자가 표시되지 않고 버튼을 클릭 할 때만 나타납니다).부모가 보이면 Gazo Widget을 초기화 /로드하십시오.

이 동작이 필요한 이유는이 위젯이 페이지가 처음으로 다른 모든 필드 위젯/패널/대화 상자를 인스턴스화 할 때 사용할 수없는 애플릿 HTML 코드를로드해야하기 때문입니다. 따라서 대화 상자가 명시 적으로 나타날 때까지 다른 응용 프로그램에서 애플릿 코드를 가져 오는 것을 지연해야합니다.

이것이 가능합니까?

+0

예, 게으른 로딩이 가능하다. 예를 들어 IFrameElement에는 LoadHandler 이벤트가 있습니다. 다른 위젯에는 태그를 지정할 수있는 이벤트가 있습니다. – WLGfx

+0

좀 더 자세히 설명해 주시겠습니까? – NuCradle

답변

0

GWT 프레임 (IFrameElement)에로드 된 이미지 및 URL의 지연로드. 이미지/URL이 LoadHandler 이벤트를 사용하여로드되었다고 말하면 이벤트를 잡을 수 있습니다.

private void loadLoginPage() { 
    final Frame frame = new Frame(url_base + url_login); // set the frames url 
    frame.addLoadHandler(new LoadHandler() { 
     @Override 
     public void onLoad(LoadEvent event) { 
      // Get the document from the loaded frame (similar to RootPanel on main page) 
      Document doc = IFrameElement.as(frame.getElement()).getContentDocument(); 

      // From here you can wrap widgets in the frame like this 

      final TextBox username = TextBox.wrap(doc.getElementById("username")); // from the html doc using id="username" 

      // grab a div element 

      DivElement div = DivElement.as(doc.getElementById("mydiv")); 

      // Create content to be added to the doc 

      ButtonElement button_elem = doc.createPushButtonElement(); 
      Button button = Button.wrap(button_elem); 

      // attach to the document 

      div.appendChild(button.getElement()); 
     } 
    }); 
    // Attach to DOM 
    RootPanel.get("mything").add(frame); 
} 

이미지 로딩에 대해서도 비슷합니다. 이 도움이

Image image = new Image(image_url); 
image.addLoadHandler(new LoadHandler() { 
    @Override 
    public void onLoad(LoadEvent event) { 
     // image is ready to be used. 
    } 
}); 
// attach to DOM to initiate loading of the image 

희망 ...

+0

불행히도, 그것은 그들이 요구하는 것이 아닙니다. iframe이 첨부 될 때까지로드가 시작되고 이미지를 첨부하지 않아도 이미지가 즉시로드되기 시작합니다 (그리고 첨부되기 전에로드가 완료되면, 당신은 ...라는 핸들러를 결코 얻지 못할 것입니다.). 서면으로 질문하는 것은 부모가 _ 시각적 일 때까지 지체 될 수있는 방법을 요구하고 있으며, 첨부되어있는 동안 많은 방법으로 보이지 않는 것이 가능합니다. –

+0

@ ColinAlworth 당신 말이 맞아요. 저는 UI에 익숙하지 않고 기본 개념 중 일부를 이해하기 어렵습니다. 특히 초보자를위한 GXT 리소스가 많지 않습니다. GXT의 LoadHandler (GWT가 아닌)를 구현하고 위젯을 생성자에 addHandler (this, Type <...>)로 등록하기 위해 위젯 (Html ​​확장)을 만들려고했습니다. 그런 다음 대화 상자가 표시 될 때 발표자에서'LoadEvent'와 함께'fireEvent()'를 호출하지만 위젯에서'onLoad (LoadEvent <...>)'의 구현은 결코 호출되지 않습니다. 나는 잘못된 길을 가고 있는가? – NuCradle

+0

GWT'LoadEvent'는 "이 위젯의 ​​DOM 요소로 인해 네이티브 LOAD 이벤트가 발생했습니다"라는 의미이며, GXT'LoadEvent '은 "이 로더에 대한 M 형 데이터가 설정'C'에서 사용 가능함을 의미합니다." . 당신도 원하는 것도 아닙니다. 대신, AttachEvent를보고 (처리가 끝나면 핸들러를 제거하는) 대화 상자가 화면에 표시 될 때마다 (대화 상자가 표시 될 때마다 발생하는) 대화 상자의 ShowEvent를 감시 할 수 있습니다 (BeforeShowEvent도 고려하십시오. 너는 마음을 바꾸고 보여주지 말 것). –