奇怪为什么 RemoveAction 里有 afterActionPerformedHandler事件,却没有 beforeActionPerformedHandler 事件呢?不然就可以通过 @Install 处理了。
你好,我查了一下,确实没有了。但是现在可以这么实现:
@Named("treeNodesTable.remove")
private RemoveAction<TreeNode> treeNodesTableRemove;
@Autowired
private GroupTable<TreeNode> treeNodesTable;
@Subscribe
public void onAfterShow(AfterShowEvent event) {
// 假设只有 name=1114 的那行能删除
treeNodesTableRemove.addEnabledRule(()-> treeNodesTable.getSelected().iterator().hasNext() &&
treeNodesTable.getSelected().iterator().next().getName().equals("1114"));
}
实现效果:
1 个赞
是的,可以控制按钮来实现
又是只做一半
控制显隐却没有这个添加规则可用
什么意思?
现在是通过表格 onTableSelectEventSelection事件来单独设置编辑和显隐的
针对特定数据的权限,其实推荐用 行级角色 :: Jmix 文档 中的断言策略来做。
这个应该是有意为之,否则一个按钮的显示与否会导致整个 button panel 展示按钮的数量变化,用户用起来会觉得按钮跳来跳去。
另外,你上面那段代码可以简化:
boolean hasSomething = event.getSelected().stream().filter(...).count() > 0
tenantsTableEdit.setVisible (!hasSomething);
tenantsTableView.setVisible (hasSomething);
tenantsTableEdit.setEnabled (!hasSomething);
tenantsTableRemove.setEnabled (!hasSomething);
1 个赞
对头, > 0
也可用 anyMatch
或 noneMatch
1 个赞