在Eclipse4中从菜单贡献传递secondaryId到零件创建
我目前正在尝试修复应用程序中的一个回归问题,这似乎是由我们从e3切换到使用e4和e3兼容层引起的 我们有一些视图是由它们的在Eclipse4中从菜单贡献传递secondaryId到零件创建,eclipse,eclipse-rcp,e4,Eclipse,Eclipse Rcp,E4,我目前正在尝试修复应用程序中的一个回归问题,这似乎是由我们从e3切换到使用e4和e3兼容层引起的 我们有一些视图是由它们的secondaryId配置的。这些视图仅在用户选择菜单选项时创建,我们依靠菜单贡献来设置secondaryId,以便视图可以根据该信息进行自我配置 使用e3,我们在视图pluginsplugin.xml的org.eclipse.ui.views扩展点中定义了一个视图: <extension point="org.eclipse.ui.views"> <
secondaryId
配置的。这些视图仅在用户选择菜单选项时创建,我们依靠菜单贡献来设置secondaryId
,以便视图可以根据该信息进行自我配置
使用e3,我们在视图pluginsplugin.xml
的org.eclipse.ui.views
扩展点中定义了一个视图
:
<extension point="org.eclipse.ui.views">
<category id="my.view.category"
name="My View Category Name">
</category>
<view allowMultiple="true"
category="my.view.category"
class="my.views.View"
id="my.views.view.multiple"
name="My Views View"
restorable="true">
</view>
</extension>
这很有效。当用户选择“我的菜单”菜单上的“特定视图”项时,在类My.views.View
和getViewSite().getSecondaryId()
上调用了createPartControl()
,并正确返回了viewSpecificData
,可用于配置视图
然而,在e4中,这不起作用。通过跟踪代码,ViewReference
类不再显式存储secondaryId
,而是ViewPart
和ViewReference
只需提取viewId
中冒号后的所有内容,并将其作为secondaryId
返回。因此,我们现有的viewId
中没有冒号,返回的第二个id是null
我尝试删除secondaryId
并将我的viewSpecificData
添加到viewId
:
<parameter name="org.eclipse.ui.views.showView.viewId"
value="my.views.view.multiple:viewSpecificData">
</parameter>
这是可行的,但是我有十几个菜单项需要在我正在处理的应用程序中转换,这意味着有十几个新视图,还有十几个东西需要在每个应用程序的两个不同部分plugin.xml
文件之间保持一致。不仅如此,我们在这个框架上构建了24个应用程序,因此我们可以很容易地讨论需要添加到整个代码库中的数百个视图
我忍不住觉得一定有更好的办法
所以
- 是否有一种方法可以将菜单贡献中的
信息获取到secondaryId
中,而无需为每个视图创建一个新的viewId
视图
- 或者,是否有办法创建一个单独的
,无论冒号后面的文本是什么†都将使用该视图视图
- 最后,有没有更好的方法来解决获取启动相同视图类但具有特定视图配置的菜单命令的问题
†我已尝试添加一个具有
id=“my.views.view.multiple:*”
的视图。我想您可以定义自己的命令并编写一个正确处理参数的命令处理程序。对于兼容模式,您只需要使用主id和辅助id调用IWorkbenchPage.showView
方法的变体。
<parameter name="org.eclipse.ui.views.showView.viewId"
value="my.views.view.multiple:viewSpecificData">
</parameter>
<extension point="org.eclipse.ui.views">
<view allowMultiple="true"
category="my.view.category"
class="my.views.View"
id="my.views.view.multiple:viewSpecificData"
name="My Views View"
restorable="true">
</view>
</extension>