Не уверен, что это самое лучшее решение, но вот что я придумал:
Поскольку виджет может быть программно добавлен / удален, и чтобы не связывать решение с какой-то конкретной окружающей разметкой, которую мыне всегда могу рассчитывать во всех случаях, что я сделал, чтобы подключить методы _showResultList и _hideResultList в ComboBox, и когда откроется всплывающее окно, пройдитесь по DOM, пока мы не достигнем тега <html>
, добавив прослушиватели onscroll для каждого предка.1004 *
Обработчик события onscroll выглядит просто:
var myPos = dojo.position(this.domNode, true);
this._popupWidget.domNode.parentNode.style.top = '' + (myPos.y + myPos.h) + "px";
, где this
- рассматриваемый виджет.Я помещаю обработчик в виджет, используя dojo.hitch
.В методе close я удаляю слушателей.Мне нужно немного очистить код, прежде чем он будет презентабельным, но когда он будет завершен, я добавлю его к этому ответу.
Примечание: здесь я показываю только обновление позиции y.Часть очистки заключается в добавлении обновления положения x, если кто-то прокручивает по горизонтали.