我对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