我被困在获得DialogBox
. 我知道 设置PopupPanel
它是(它是父级DialogBox
)的常见问题(和奇怪的解决方法) ,但是如果我想得到它,盒子连接到 DOM 的确切时刻是什么时候?既不压倒也无济于事:show
onAttach
show
class MyDialog extends DialogBox {
public MyDialog(. . .) {
ComplexPanel vert = new VerticalPanel();
vert.add("Test");
vert.add(new Button("Close", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
MyDialog.this.hide();
}
}));
setWidget(vert);
this.addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
if (event.isAttached()) Log.debug("attach:"+MyDialog.this.getAbsoluteLeft() +";"+
MyDialog.this.getAbsoluteTop());
}
});
}
@Override
protected void onLoad() {
super.onLoad();
Log.debug("load:"+this.getAbsoluteLeft() +";"+this.getAbsoluteTop());
}
@Override
public void show() {
super.show();
Log.debug("show:"+this.getAbsoluteLeft() +";"+this.getAbsoluteTop());
}
}
所以当我打电话时new MyDialog().show();
,所有这些行都会记录0;0
,但是对话框位于页面的中心。但我想要的是offsetParent
位置链的总和。(即使在 JavaScript 中,它们在这些时刻也是 0,如果使用 JSNI 来检查这一点)
同样,setPopupPositionAndShow
允许设置位置但不获取它:(