eclipse e4 - 如何唯一标识 eclipse e4 视图(部分)?

eclipse e4 - How are eclipse e4 views (parts) uniquely identified?

我正在使用 PartDescriptors 创建相同 MPart 的多个实例。 我如何识别每个部分?我 eclipse rcp 3.x 很容易通过其主要和次要 ID 找到 ViewPart。我如何在 e4 rcp 编程模型中实现这一点?

根据描述符创建的所有部分都将具有相同的 ID,因此您可以添加一些额外的识别信息。

一种方法是在创建部件时将您自己的唯一数据添加到部件的瞬态数据中:

Object uniqueId = .....

part.getTransientData().put("part id key", uniqueId);

并读取 ID:

part.getTransientData().get("part id key");

要查找零件,您可以使用 EModelServicefindElements 方法之一。带有 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.