我正在使用PartDescriptors创建相同MPart
的多个实例。
如何识别每个部件?我喜欢rcp 3.x很容易通过它的primary和Seconday id找到ViewPart
。我如何在e4 rcp编程模型中实现这一目标?
答案 0 :(得分:1)
从描述符创建的所有部件都具有相同的ID,因此您可以添加一些其他识别信息。
执行此操作的一种方法是在创建零件时将自己的唯一数据添加到零件的瞬态数据中:
Object uniqueId = .....
part.getTransientData().put("part id key", uniqueId);
用以下内容读取id:
part.getTransientData().get("part id key");
要查找该部分,您可以使用findElements
EModelService
方法之一。带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
。