3

public メソッドを使用して、子を親に動的に追加しようとしています。コンストラクター内から呼び出すとcanvasContainer.add(Canvas.createIfSupported())、意図したとおりに機能しますが、insertLayerAt()メソッド内から呼び出すと、DOM に追加されず、黙って失敗します。

別のパネルを親要素として、別のウィジェットを子要素として使用しようとしましたが、問題は解決しません。

私はこれに間違って近づいていますか?コンストラクターの外側から add メソッドを使用してはならないというものは何も見つかりませんが、それよりも単純なものが欠けている可能性があります。

私のコードは以下のとおりです.GWT 2.4とMVP4Gを使用しています

public class CanvasView extends Composite implements
        CanvasPresenter.ICanvasView {

    LayoutPanel canvasContainer;

    @Inject
    public CanvasView()
    {
        Document document = Document.getInstance();
        Dimension d = document.getDimension();


        canvasContainer = new LayoutPanel();
        canvasContainer.setPixelSize(d.width, d.height);
        canvasContainer.setStyleName("CanvasController");

        initWidget(canvasContainer);


    }

    public void insertLayerAt(int zpos, Layer layer)
    {

        Canvas canvas = Canvas.createIfSupported();
        if (canvas != null)
        {
            GWT.log("Canvas is supported.", null);              
            canvasContainer.add(canvas);

        }else{
            GWT.log("Canvas isn't supported.", null);
        }
    }


}
4

1 に答える 1

0

遅延コマンドを使用すると、このようなことが発生したときに、何かが終わっていないことが理由である場合に役立ちます。ただし、このコードを試したことがないので、この場合に機能するかどうかはわかりません。

public void insertLayerAt(int zpos, Layer layer)
{

    Canvas canvas = Canvas.createIfSupported();
    if (canvas != null)
    {
        GWT.log("Canvas is supported.", null);              
        Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {         
            public void execute() {
                    canvasContainer.add(canvas);
            }
         });
    }else{
        GWT.log("Canvas isn't supported.", null);
    }
}
于 2011-12-02T00:03:24.523 に答える