我目前正在尝试修复我们的应用程序中的回归,这似乎是由我们从e3切换到使用e3与e3兼容层进行的。
我们有一些由secondaryId
配置的观点。这些视图仅在用户选择菜单选项时创建,我们依靠菜单贡献来设置secondaryId
,以便视图可以根据该信息进行自我配置。
使用e3,我们在视图插件view
的{{1}}扩展点中定义了一个org.eclipse.ui.views
:
plugin.xml
然后在我们的应用程序<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>
中,我们定义了引用此视图的菜单贡献:
plugin.xml
这很好用。当用户选择“我的菜单”菜单上的“特定视图”项时,<extension point="org.eclipse.ui.menus">
<menuContribution allPopups="false"
locationURI="menu:window?after=showView">
<menu label="My Menu">
<command commandId="org.eclipse.ui.views.showView"
label="Specific View"
style="push">
<parameter name="org.eclipse.ui.views.showView.viewId"
value="my.views.view.multiple">
</parameter>
<parameter name="org.eclipse.ui.views.showView.secondaryId"
value="viewSpecificData">
</parameter>
</command>
</menu>
</menuContribution>
</extension>
已在课程createPartControl()
上调用,my.views.View
正确返回getViewSite().getSecondaryId()
,可以使用配置视图。
然而,在e4中,这不起作用。跟踪代码,viewSpecificData
类不再明确存储ViewReference
,而secondaryId
和ViewPart
只提取ViewReference
中冒号后面的所有内容将 作为viewId
返回。因此,对于我们现有的secondaryId
,其中没有冒号,返回的secondaryId为viewId
。
我尝试删除null
并将secondaryId
添加到viewSpecificData
:
viewId
但这只是意味着当选择菜单项时,会弹出一个错误对话框,说“找不到视图:my.views.view:viewSpecificData”,所以我在我的应用程序中添加了一个新视图{{1} }
<parameter name="org.eclipse.ui.views.showView.viewId"
value="my.views.view.multiple:viewSpecificData">
</parameter>
这很有用,但是我有十几个菜单项需要转换我正在处理的应用程序,这意味着十几个新视图,以及需要在每个部分的两个不同部分之间保持一致的十几个应用程序plugin.xml
文件。不仅如此,我们还在此框架上构建了24个应用程序,因此我们可以轻松地讨论需要在整个代码库中添加的数百个视图。
我不禁觉得必须有更好的方法。
所以,
<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>
信息添加到plugin.xml
,而无需为每个人创建新的secondaryId
?viewId
,在冒号†之后的任何文本都会使用? †我尝试添加view
的视图。