我只是想通过一个公共方法动态地将子元素添加到父元素。如果我从构造函数内部调用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);
}
}