2010-07-22 4 views
0

나는 함수를 캡슐화하고 코드 분할을위한 비동기 공급자 패턴을 구현하는 위젯 (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

답변

0

이 문제는 코드 분할과 관련이 없음을 깨달았습니다. 내가 GWT.runAsync 함수를 제거하고 같은 문제가 여전히 나타납니다. 이 문제는 DockLayoutPanel, 단위 EM 및 디자인 패턴과 관련이 있기 때문에이 문제는 다른 질문에 게시해야합니다. 좀 더 구체적으로, 저는 Tha Async Provider 패턴을 Singleton 패턴으로 변경했으며 문제는 여전히 나타납니다. 그리고 다시 EM에서 PX로 단위를 변경하면 문제가 해결 된 것으로 보입니다. 어쨌든 고마워, !

편집 : https://stackoverflow.com/questions/3313981/gwt-ie8-problem-with-composite-over-docklayoutpanel-the-unit-em-and-the-single

:이 게시물에서이 문제의 새로운 특성을 게시
관련 문제