我有这个代码
@Inject
@DataField("table-col")
SimplePanel tableContainer;
@PostConstruct
public void build() {
scroll(tableContainer.getElement(), this);
tableContainer.addHandler(new ScrollHandler() {
@Override
public void onScroll(ScrollEvent scrollEvent) {
// TODO - Does not trigger
Window.alert("Scroll");
}
}, ScrollEvent.getType());
}
我的问题是,为什么当类似的Javascript(JSNI(处理程序工作时,tableContainer
滚动处理程序现在确实有效:
public static native void scroll(Element elem, TablePage instance) /*-{
$wnd.$( elem ).scroll(function() {
if (elem.scrollTop >= (elem.scrollHeight - elem.offsetHeight)) {
instance.@com.mygwtapp.app.TablePage::scrolledToBottom()();
}
});
}-*/;
这里可能出了什么问题?
> SimplePanel
实际上并不侦听ScrollEvent
,如果您想要一个支持滚动的面板,您可以使用ScrollPanel
(这是一个支持滚动的简单面板(。
ScrollPanel scrollPanel = new ScrollPanel();
scrollPanel.addScrollHandler(new ScrollHandler() {
@Override
public void onScroll(ScrollEvent scrollEvent) {
// TODO - Does not trigger
Window.alert("Scroll");
}
});
在第二种方式中,您实际上是将事件添加到元素本身,并等待事件从浏览器触发以调用您的处理程序。在这两种方式中,事件都是从浏览器触发的,但第一个事件实际上并不侦听它,而第二个事件会侦听它。