Вызов LayoutPanel.add (child) извне конструктора моего составного виджета приводит к тому, что дочерний элемент не добавляется в DOM - PullRequest
3 голосов
/ 24 ноября 2011

Я просто пытаюсь динамически добавить детей к родителю через публичный метод. Если я вызываю 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);
        }
    }


}

1 Ответ

0 голосов
/ 02 декабря 2011

Использование отложенной команды помогает иногда, когда такие вещи случаются, если причина в том, что есть кое-что, с чем они не закончили. Однако я не пробовал этот код, поэтому понятия не имею, работает ли он в этом случае.

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