我正在使用TreeTable(来自wicket-extensions),我希望能够通过单击其中的任何位置来选择行,而不是通常单击一个单元格中的链接来选择行。我理解这可以通过向表示行的组件添加AjaxEventBehavior(“onclick”)来实现,但我似乎无法找到暴露行组件的任何方法。
答案 0 :(得分:7)
之后我想出了一个解决方案。行元素位于populateTreeItem
的{{1}}方法中。当您创建treetable时,请覆盖此方法,如下所示:
TreeTable
通常在向行添加行为时很有用。在我的情况下,我将不得不做一些更重要的事情来协调这种点击切换行为与应该扩展/收缩节点的点击以及链接点击。
在这些情况下再次切换选择会产生令人遗憾的效果,即短暂地切换节点进出不需要的状态,这是不理想的。相反,覆盖@Override
protected void populateTreeItem(final WebMarkupContainer item, final int level) {
super.populateTreeItem(item, level);
item.add(new AjaxEventBehavior("onclick") {
@Override
protected void onEvent(final AjaxRequestTarget target) {
final TreeNode node = ((TreeNode) item.getDefaultModelObject());
rowClickSelect(node);
});
}
};
和onJunctionLinkClicked
方法,在我们刚刚在onNodeLinkClicked
中设置的onClick
行为之前,点击事件会触及这些方法:
populateTreeItem
最后,添加方法@Override
protected void onJunctionLinkClicked(final AjaxRequestTarget target, final TreeNode node) {
super.onJunctionLinkClicked(target, node);
skipNextRowClick();
}
@Override
protected void onNodeLinkClicked(final AjaxRequestTarget target, final TreeNode node) {
super.onNodeLinkClicked(target, node);
skipNextRowClick();
}
和skipNextRowClick
:
rowClickSelect