[英]How to add onclick selection to rows of wicket TreeTable?
我正在使用 TreeTable(来自 wicket-extensions),我希望能够通过单击其中的任意位置来 select 一行,而不是单击一个单元格中的链接到 select 行的通常行为。 我知道这应该可以通过向表示行的组件添加 AjaxEventBehavior("onclick") 来实现,但我似乎找不到任何暴露行组件的方法。
之后我想出了一个解决方案。 行元素在TreeTable
的populateTreeItem
方法中可用。 当你创建你的树表时,像这样覆盖这个方法:
@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);
});
}
};
通常在向行添加行为时很有用。 就我而言,我将不得不做一些更重要的事情来协调这种点击切换行为与应该展开/收缩节点的点击以及链接点击。
在这些情况下,再次切换选择会带来不幸的效果,即短暂地切换节点进出不需要的 state,这并不理想。 相反,重写onJunctionLinkClicked
和onNodeLinkClicked
方法,在它到达我们刚刚在populateTreeItem
中设置的onClick
行为之前,点击事件将触及这些方法:
@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
:
/**
* Ensure the next call to rowClickSelect() will have no effect.
*/
private void skipNextRowClick() {
this.skipNextClickSelect = true;
}
private void rowClickSelect(final TreeNode node) {
if (this.skipNextClickSelect) {
this.skipNextClickSelect = false;
return;
}
// select on click row
final boolean isSelected = Log4jPanel.this.treeTable.getTreeState().isNodeSelected(node);
treeTable.getTreeState().selectNode(node, !isSelected);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.