2016-12-15 61 views
0

我對GXT(以及GWT/GWTP)非常陌生。我想知道當包含面板的模態對話框顯示時(如果對話框最初未顯示,並且僅在單擊按鈕時出現),我是否可以延遲加載GXT(4.0)[自定義]小部件。懶惰初始化/加載一個GXT小部件,當它的父類變得可見

我想要這種行爲的原因是,這個小部件需要加載一個小程序HTML代碼,當頁面最初實例化所有其他字段小部件/面板/對話框時,該代碼不可用。因此,我需要延遲從另一個應用程序獲取小程序代碼,直到明確出現對話框。

這可能嗎?

+0

是,延遲加載是可能的。例如IFrameElement有一個LoadHandler事件。其他小部件也會有可以標記的事件。 – WLGfx

+0

你能再細說一下嗎? – NuCradle

回答

0

加載到GWT框架(IFrameElement)中的圖像和URL的延遲加載。使用LoadHandler事件加載圖像/ URL後,您可以捕獲事件。

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會在連接時開始加載,即使您沒有附加它,圖像也會立即開始加載(並且如果它在加載之前完成加載,你永遠不會得到稱爲...的處理程序)。寫作的問題是要求一種延遲的方式,直到父母是_visible_,並且可能在許多方面不可見,同時仍然被附着。 –

+0

@ColinAlworth你是對的。我對UI很陌生,一些基本概念很難理解,特別是在這方面,初學者沒有太多的GXT資源。我試圖讓我的widget(擴展'Html')來實現GXT的'LoadHandler'(不是GWT's),並用'addHandler(這個,類型爲<...>)'在它的構造函數中註冊這個小部件。然後,當對話即將顯示時,在演示者中用'LoadEvent'調用'fireEvent()',但小部件中'onLoad(LoadEvent <...>)'的實現永遠不會被調用。我在錯誤的道路上? – NuCradle

+0

GWT'LoadEvent'的意思是「這個小部件的DOM元素導致了一個本地LOAD事件」,而GXT'LoadEvent '表示這個加載器的'M'類型的數據已經可用,從配置'C'「 。這也不是你想要的。相反,您可能需要查看'AttachEvent'(然後在完成時移除處理程序),或者觀察對話框的ShowEvent,每次在屏幕上顯示對話框時都會觸發(也可以考慮'BeforeShowEvent',它允許你改變主意而不顯示它)。 –