0

機能性をカプセル化し、コード分割用の非同期プロバイダーパターンを実装するウィジェット(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

4

1 に答える 1

0

この問題はコード分割とは何の関係もないことに気づきました。GWT.runAsync関数を削除しましたが、同じ問題が引き続き発生します。この問題は、DockLayoutPanel、ユニットEM、およびデザインパターンに関連している可能性が高いため、この問題は別の質問に投稿する必要があります。具体的には、非同期プロバイダーのパターンをシングルトンパターンに変更しましたが、問題は引き続き発生します。また、単位をEMからPXに変更すると、問題は解決したようです。とにかくありがとう!

編集:私はこの投稿にこの問題の新しい特徴を投稿しました: https ://stackoverflow.com/questions/3313981/gwt-ie8-problem-with-composite-over-docklayoutpanel-the-unit-em-and-the-独身

于 2010-07-22T21:56:28.457 に答える