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
吗?我现在刚试过,但不幸的是没有什么不同。