Gwt 从我的复合小部件的构造函数外部调用LayoutPanel.add(child)会导致子项不会附加到DOM中

Gwt 从我的复合小部件的构造函数外部调用LayoutPanel.add(child)会导致子项不会附加到DOM中,gwt,mvp,mvp4g,Gwt,Mvp,Mvp4g,我只是尝试通过一个公共方法动态地将子对象添加到父对象中。如果我从构造函数内部调用canvasconner.add(Canvas.createIfSupported()),它会按预期工作,但从insertLayerAt()方法内部,它会自动失败,不会附加到DOM 我尝试过使用不同的面板作为父元素,使用不同的小部件作为子元素,但问题仍然存在 我是不是走错路了?我找不到任何说明我不应该在构造函数外部使用add方法的内容,但是我可能会遗漏一些更简单的内容 下面是我的代码,我使用的是GWT2.4和MVP4

我只是尝试通过一个公共方法动态地将子对象添加到父对象中。如果我从构造函数内部调用
canvasconner.add(Canvas.createIfSupported())
,它会按预期工作,但从
insertLayerAt()
方法内部,它会自动失败,不会附加到DOM

我尝试过使用不同的面板作为父元素,使用不同的小部件作为子元素,但问题仍然存在

我是不是走错路了?我找不到任何说明我不应该在构造函数外部使用add方法的内容,但是我可能会遗漏一些更简单的内容

下面是我的代码,我使用的是GWT2.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);
        }
    }


}

如果原因是有些事情没有完成,那么使用延迟命令有时会有帮助。我还没有尝试过这段代码,所以我不知道它在这种情况下是否有效

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);
    }
}

运行应用程序时,请尝试查看Chrome的JavaScript日志。你可能会发现,在一个例子中,它试图访问一个尚未创建的对象。对不起,我忘了说,JS日志中没有写任何东西。我还试着用调试器来区分应用程序,但问题似乎直到进入Invokenactive等时才出现,这对我来说有点太复杂了。过去,我注意到许多与自定义小部件相关的事情在
initWidget
之前都无法工作。你试过在
initWidget
之后移动
setPixelSize
setStyleName
吗?我现在刚试过,但不幸的是没有什么不同。