0
我使用PartDescriptors创建相同MPart
的多个实例。 如何识别每个部分?我eclipse rcp 3.x很容易找到一个ViewPart
其主要和Seconday id。我如何在e4 rcp编程模型中实现这一点?eclipse e4 - 如何识别eclipse e4视图(零件)?
我使用PartDescriptors创建相同MPart
的多个实例。 如何识别每个部分?我eclipse rcp 3.x很容易找到一个ViewPart
其主要和Seconday id。我如何在e4 rcp编程模型中实现这一点?eclipse e4 - 如何识别eclipse e4视图(零件)?
所有的描述符创建的部件将具有相同的ID,因此它是由你来添加一些额外的识别信息。要做到这一点
一种方法是你自己独特的数据,当您创建零件到零件的瞬态数据:
Object uniqueId = .....
part.getTransientData().put("part id key", uniqueId);
与和读取ID:
part.getTransientData().get("part id key");
要找到可以使用的EModelService
的findElements
方法之一的部分。带有Selector
的版本可让您对id和数据进行编码匹配。例如,如果一切都在一个部分堆栈:
MPartStack partStack = .... get part stack
List<MPart> parts = modelService.findElements(partStack, MPart.class, EModelService.ANYWHERE, new FindPartSelector(id, data));
其中FindPartSelector
是你写的选择。这只有一种方法:
@Override
public boolean select(final MApplicationElement element)
{
// TODO match id and transient data
}
请注意,当您退出RCP时,瞬态数据会丢失。如果这些部分在会话之间持续存在,则可以使用getPersistedState
而不是getTransientData
。
确定我将永远有通过所有部件遍历'partService.getParts(GOT)'然后找我的一部分。是对的吗 ? – ssdimmanuel
可以使用的''EModelService'方法findElements'一个做搜索 - 看到更新的答案。 –
请记住,当工作台模型持久化(-clearPersistedData PARAM未设置),瞬态数据被丢弃。现在,如果工作台模型在下次启动时恢复,则这些部件将不具有该“辅助ID”。 –