機能性をカプセル化し、コード分割用の非同期プロバイダーパターンを実装するウィジェット(Main.java)があります。さらに、プリフェッチパターンを使用して、ブラウザがウェルカム画面をロードした直後にコードをダウンロードするようにします。
この問題はIE8で発生します。プリフェッチを行わずにメインウィジェットを使用すると、すべて問題ありません。ただし、最初にプリフェッチしてからメインウィジェットを使用しようとすると、ブラウザにはメインウィジェットで使用されるDockLayoutPanelの中央パネルのみが表示されます。Firefoxではすべてが正常に機能します。
コードは次のとおりです。
//BugTest.java
package com.bugtest.clearadd.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.RootPanel;
public class BugTest implements EntryPoint {
@Override
public void onModuleLoad() {
Button prefetchButton = new Button("Prefetch!");
prefetchButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Main.getInstance(new AsyncCallback<Main>() {
@Override
public void onSuccess(Main result) {
PopupPanel popupPanel = new PopupPanel(true);
popupPanel
.setWidget(new Label("Prefetching finished!"));
popupPanel.center();
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
});
}
});
Button switchButton = new Button("Switch!");
switchButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Main.getInstance(new AsyncCallback<Main>() {
@Override
public void onSuccess(Main result) {
RootPanel.get().clear();
RootLayoutPanel.get().add(result);
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
});
}
});
FlowPanel flowPanel = new FlowPanel();
flowPanel.add(new Label("Bug test!"));
flowPanel.add(prefetchButton);
flowPanel.add(switchButton);
RootPanel.get().add(flowPanel);
}
}
//Main.java
package com.bugtest.clearadd.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ResizeComposite;
public class Main extends ResizeComposite {
private static Main instance = null;
public static void getInstance(final AsyncCallback<Main> callback) {
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onSuccess() {
if (instance == null) {
instance = new Main();
}
callback.onSuccess(instance);
}
@Override
public void onFailure(Throwable reason) {
callback.onFailure(reason);
}
});
}
private Main() {
DockLayoutPanel dockLayoutPanel = new DockLayoutPanel(Unit.EM);
dockLayoutPanel.addNorth(new Label("North!"), 7);
dockLayoutPanel.addWest(new Label("West!"), 15);
dockLayoutPanel.add(new Label("Center! :D"));
initWidget(dockLayoutPanel);
}
}
誰かがそれが何であるか知っていますか?前もって感謝します。
編集:DockLayoutPanelユニットをPXに変更すると、すべてが正常に機能することに気付きました。それはバグですか、それとも何かが足りませんか?再度、感謝します。:P