Gwt 单击树中的某个项目时,垂直滚动条会向上跳
看看这个简单的代码Gwt 单击树中的某个项目时,垂直滚动条会向上跳,gwt,tree,uibinder,gwtp,Gwt,Tree,Uibinder,Gwtp,看看这个简单的代码 Tree testTree=new Tree(); TreeItem testTreeItem=new TreeItem("test"); TreeItem testTreeItem2=new TreeItem("test2"); more TreeItem.... testTree.addItem(testTreeItem1); testTree.addItem(testTreeItem2); ........ 现在,调整浏览器的大小,以便可以看到右侧的
Tree testTree=new Tree();
TreeItem testTreeItem=new TreeItem("test");
TreeItem testTreeItem2=new TreeItem("test2");
more TreeItem....
testTree.addItem(testTreeItem1);
testTree.addItem(testTreeItem2);
........
现在,调整浏览器的大小,以便可以看到右侧的垂直滚动条。现在,单击最底部的树项extestTreeItem10
,您将看到垂直滚动条向上跳转,而不是停留在当前位置
使用UiBinder时也会发生此错误
<g:Tree ui:field="myTree">
<g:TreeItem text="Item 1" />
<g:TreeItem text="Item 2" /> .....
</g:Tree>
.....
另外,
Tree
的addItem
也被弃用了,那么如何解决这个问题呢?这个黑客代码可能有效,但我不确定它是正确的修复方法还是优雅的修复方法
这个黑客代码将来会被破解吗
顺便说一下,只需稍微修改一下树:
Tree testTree=new Tree(){
public void onBrowserEvent(Event event) {
if (DOM.eventGetType(event) == Event.ONCLICK) {
return;
}
if (DOM.eventGetType(event) == Event.ONMOUSEDOWN) {
//int s = scrollPanel.getVerticalScrollPosition();
int scrollLeftInt = Window.getScrollLeft();
int scrollTopInt = Window.getScrollTop();
DOM.setStyleAttribute(this.getElement(), "position",
"fixed");
super.onBrowserEvent(event);
DOM.setStyleAttribute(this.getElement(), "position",
"static");
//scrollPanel.setVerticalScrollPosition(s);
Window.scrollTo(scrollLeftInt,scrollTopInt);
return;
}
super.onBrowserEvent(event);
}
};
不久前我正在解决这个问题。这段代码帮了我的忙
private Tree gwtTree = new Tree(){
@Override
public void setFocus(boolean focus) {
//Do not do anything!
}
};
是GWT的官方支持论坛吗?我不知道。我打赌其他人也没有。如果这真的是GWT中的一个bug,你最好向他们报告这个问题,我认为这个bug似乎是从2007年开始出现的,但不知何故谷歌没有正确修复。你是否尝试了上一条评论中建议的代码?它被标记为
//下面的snnipet工作得很好
,是的,但它喜欢黑客代码,它可能会在future@KitiGWT是开源的,正在等待您的补丁:;StackOverflow只能为您提供变通方法,如果您拒绝使用它们,则会出现问题…