在E4中打开编辑器部分

在E3中,这是一个基本用例:我们想要基于某个模型对象打开一个编辑器(或视图或部件,无论你想要什么),然后包装在IEditorInput

在E4中,这似乎是在没有替换的情况下被删除的function之一。 但是你可以重新发明轮子:

 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; } 

它有效,这里没问题。 对于基本function而言,这只是一项工作,所以现在我们认为我们并不真正理解E4应该如何工作。

我们错过了什么吗? 这真的是处理输入部件的正确方法吗? 这个标准用例是否没有框架支持?