从Composite Widget的外部构造函数调用LayoutPanel.add(child)会导致子组件不被追加到D



我只是想通过一个公共方法动态地将子元素添加到父元素。如果我从构造函数内部调用canvasContainer.add(Canvas.createIfSupported()),它会按预期工作,但从insertLayerAt()方法内部,它会无声地失败,不追加到DOM。

我试过使用不同的panel作为父元素,使用不同的Widgets作为子元素,但是问题仍然存在

我写错了吗?我找不到任何东西说我不应该在构造函数外部使用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);
        }
    }

}

当发生这样的事情时,如果原因是有些事情没有完成,使用延迟命令有时会有所帮助。我还没有尝试过这个代码,所以我不知道它是否在这种情况下工作。

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

最新更新