나는 함수를 캡슐화하고 코드 분할을위한 비동기 공급자 패턴을 구현하는 위젯 (Main.java)이있다. 또한 Prefetching 패턴을 사용하여 시작 화면을로드 한 후 브라우저가 직접 코드를 다운로드합니다.IE8에서 GWT 코드가 이상하게 동작한다
IE8에서 문제가 발생합니다. 프리 패치를하지 않고 Main 위젯을 사용하면 모든 것이 정상입니다. 그러나 먼저 프리 페치를 수행하고 Main widget을 사용하려고 시도하면 브라우저는 Main 위젯에서 사용하는 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);
}
}
사람이 될 수있는 것을 알고 있나요? 미리 감사드립니다.
EDIT : PX로 DockLayoutPanel 단위를 변경하면 모든 것이 잘 작동하는 것으로 나타났습니다. 그것은 버그입니까, 아니면 뭔가 빠졌습니까? 다시 한번 감사드립니다. : P