我對GXT(以及GWT/GWTP)非常陌生。我想知道當包含面板的模態對話框顯示時(如果對話框最初未顯示,並且僅在單擊按鈕時出現),我是否可以延遲加載GXT(4.0)[自定義]小部件。懶惰初始化/加載一個GXT小部件,當它的父類變得可見
我想要這種行爲的原因是,這個小部件需要加載一個小程序HTML代碼,當頁面最初實例化所有其他字段小部件/面板/對話框時,該代碼不可用。因此,我需要延遲從另一個應用程序獲取小程序代碼,直到明確出現對話框。
這可能嗎?
我對GXT(以及GWT/GWTP)非常陌生。我想知道當包含面板的模態對話框顯示時(如果對話框最初未顯示,並且僅在單擊按鈕時出現),我是否可以延遲加載GXT(4.0)[自定義]小部件。懶惰初始化/加載一個GXT小部件,當它的父類變得可見
我想要這種行爲的原因是,這個小部件需要加載一個小程序HTML代碼,當頁面最初實例化所有其他字段小部件/面板/對話框時,該代碼不可用。因此,我需要延遲從另一個應用程序獲取小程序代碼,直到明確出現對話框。
這可能嗎?
加載到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
希望這有助於...
不幸的是,這並不是他們所要求的 - iframe會在連接時開始加載,即使您沒有附加它,圖像也會立即開始加載(並且如果它在加載之前完成加載,你永遠不會得到稱爲...的處理程序)。寫作的問題是要求一種延遲的方式,直到父母是_visible_,並且可能在許多方面不可見,同時仍然被附着。 –
@ColinAlworth你是對的。我對UI很陌生,一些基本概念很難理解,特別是在這方面,初學者沒有太多的GXT資源。我試圖讓我的widget(擴展'Html')來實現GXT的'LoadHandler'(不是GWT's),並用'addHandler(這個,類型爲<...>)'在它的構造函數中註冊這個小部件。然後,當對話即將顯示時,在演示者中用'LoadEvent'調用'fireEvent()',但小部件中'onLoad(LoadEvent <...>)'的實現永遠不會被調用。我在錯誤的道路上? – NuCradle
GWT'LoadEvent'的意思是「這個小部件的DOM元素導致了一個本地LOAD事件」,而GXT'LoadEvent
是,延遲加載是可能的。例如IFrameElement有一個LoadHandler事件。其他小部件也會有可以標記的事件。 – WLGfx
你能再細說一下嗎? – NuCradle