Я застрял в получении абсолютной позиции 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
позиций. (И они равны 0 в эти моменты даже в JavaScript, если для проверки используйте JSNI)
Опять же, setPopupPositionAndShow
позволяет установить позицию, но не получить ее: (