在E3中,这是一个基本用例:我们想要根据某个模型对象打开一个编辑器(或视图或部件,无论你想要什么),然后包装在IEditorInput
中。
在E4中,这似乎是在没有替换的情况下被删除的功能之一。但是你可以重新发明轮子:
public static final String DATA_MODEL = "model";
@Inject
private EPartService partService;
@Inject
private EPartService partService;
@Inject
private MApplication application;
public void open(String editorId, Object editorInput) {
MPart part = this.partService.createPart(editorId);
part.getTransientData().put(DATA_MODEL, editorInput);
this.partService.showPart(part, PartState.ACTIVATE);
PartStack editorStack = (MPartStack)
this.modelService.find("org.acme.application.stack", this.application);
editorStack.setVisible(true);
editorStack.getChildren().add(part);
}
(如果我错了,请纠正我。这似乎是丑陋和过于复杂的方式,是正确的方法™。)
那么,如果已有编辑器输入怎么办?在E3中,编辑器刚刚被置于顶部并被激活。在E4 ......好吧,由于没有编辑器,应用程序无法处理这种情况也就不足为奇了。
所以我们在上面的方法的顶部添加了以下内容:
for (final MPart part : this.partService.getParts()) {
if (part.getElementId().equals(editorId)
&& Objects.equals(editorId, part.getTransientData().get(DATA_MODEL)))
this.partService.showPart(part, PartState.ACTIVATE);
return;
}
它有效,这里没问题。对于基本功能而言,这只是一项工作,所以现在我们认为我们并不真正了解E4应该如何工作。
我们错过了什么吗?这真的是处理输入零件的正确方法吗?这个标准用例是否没有框架支持?