我只是想通过公共方法动态地将子项添加到父项。如果我从构造函数内部调用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);
}
}
}
答案 0 :(得分: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);
}
}