我创建了composite project,subproject的menu加载为了不互相影响,使用了代码的方式初始化sideMenu,但是发现菜单项点击后在workarea区域的菜单tab展示,无法达到自动加载menu.xml的页面交互效果(自动复用历史已打开页签、已打开页签自动至前),有什么解决办法吗?
我创建了composite project,subproject的menu加载为了不互相影响,使用了代码的方式初始化sideMenu:
但是发现菜单项点击后在workarea区域的菜单tab展示,无法达到自动加载menu.xml的页面交互效果(自动复用历史已打开页签、已打开页签自动至前),反复点击会打开新的tab:
请问有什么解决办法吗?感谢!
single mode看到了,但是我是一个composite project, 只有一个application,子模块的菜单我是放到 addon中的,子模块的single mode菜单,可以不同子模块单独加载自己的菜单吗?
不同模块点击进去显示不同的菜单:
单独的addon是运行不起来的,也就是说addon中的菜单,放到App里面才有意义。子模块的菜单在addon中定义是没问题的。在App选single mode时,会弹出提示是否保留addon的菜单以供编辑,这里可以删除不想要的addon菜单或者添加新的菜单。
这个是希望在Jmix app中点击某个模块切换主菜单的内容吗?
这个是希望在Jmix app中点击某个模块切换主菜单的内容吗?——是的
我们实现过一个隐藏菜单的功能,这里用作小示例:
- 在menu.xml给menu或menuItem都设置id
- 定义一个菜单变化的Event:
public class MenuChangeEvent extends ApplicationEvent {
private String hideMenuItemId;
public MenuChangeEvent(Object source,String hideMenuItemId) {
super(source);
this.hideMenuItemId = hideMenuItemId;
}
public String getHideMenuItemId() {
return hideMenuItemId;
}
public void setHideMenuItemId(String hideMenuItemId) {
this.hideMenuItemId = hideMenuItemId;
}
}
- 在某个页面,有两个按钮,用来控制隐藏某个菜单:
<layout>
<hbox spacing="true">
<button id="onlyTestItem" caption="隐藏admin"/>
<button id="onlyTestItem2" caption="隐藏app"/>
</hbox>
</layout>
- 该页面的控制器,按钮点击是发送需要隐藏的菜单事件。
@Autowired
private UiEventPublisher uiEventPublisher;
@Subscribe("onlyTestItem")
public void onOnlyTestItemClick(Button.ClickEvent event) {
uiEventPublisher.publishEvent(new MenuChangeEvent(this,"administration"));
}
@Subscribe("onlyTestItem2")
public void onOnlyTestItem2Click(Button.ClickEvent event) {
uiEventPublisher.publishEvent(new MenuChangeEvent(this,"application"));
}
- 在
MainScreen.java
中,监听菜单修改事件,并隐藏相应的菜单:
@EventListener
public void hideMenuItem(MenuChangeEvent event){
var menuId = event.getHideMenuItemId();
if(StringUtils.isBlank(menuId))
return;
var menuItems = sideMenu.getMenuItems();
menuItems.forEach(m->{
m.setVisible(!menuId.equals(m.getId()));
});
}
效果:
当然了,你的需求是显示某个菜单,可以根据这个思路修改实现。
太强了!感谢这么快回复!多谢了
有线下联系方式吗?看能否寻求进一步合作