在 Eclipse Scout Luna 中如何在 parent 中添加一个扩展页面到大纲?

In Eclipse Scout Luna how to add a page in extension to outline in parent?

由于 Scout 在项目中支持模块化,我们决定将事物模块化。问题是当我们向项目添加大纲时:如何向该大纲添加页面,但是当页面存在于 child 项目中时。将页面添加到大纲的函数存在于大纲中,问题是我们不应该 parent 依赖于 child,因为我们将在依赖项中获得循环。

大纲是 AbstractExtensibleOutline 类型,根据 class header 中的名称和注释,可能支持 extending/extensions,但我还没弄清楚在哪里以及如何支持这样做。

如果您扩展项目,您最终会得到 Desktop Extension 而不是 Desktop。

Desktop Extension 在父 Desktop 之后初始化,因此您可以预期父 Desktop 中的 Outline 已经准备好。

所以假设你有这种结构:

Core Project
        |
        -- Desktop
               |
               -- MyOutline

Extended Project
        |
        -- Desktop Extension
        |
        -- My Page

所以在桌面扩展的扩展项目中你需要重写初始化函数

@Override
protected ContributionCommand execInit() throws ProcessingException {

    ContributionCommand command = super.execInit();

    for (IOutline outline : getCoreDesktop().getAvailableOutlines()) {
      List<IPage> pages = new ArrayList<IPage>();

      MyPage myPage = new MyPage();
      pages.add(myPage);

      AbstractPageWithNodes pageWithNode = (AbstractPageWithNodes) outline.getRootNode();
      pageWithNode.getTree().addChildNodes(pageWithNode, pages);
    }

    return command;
 }  

这样MyPage就会添加到所有的Outlines上。如果要在具体使用instanceof函数中添加。

我不怀疑你的 正在工作,但我想推荐另一个使用 eclipse 扩展点的。我认为这是使用此 API.

的预期方式

在您的扩展程序中,您根本不需要 DesktopExtension

mycore.client (Core Project)
  |
  \- Desktop
        |
        \- MyOutline

myext.client (Extended Project)
  |
  \- MyPage

如果 MyOutline 扩展了 AbstractExtensibleOutline,您可以直接将 MyPage 添加到 MyOutline(在核心中定义),并使用 pageContribution(使用org.eclipse.scout.rt.extension.client.pages 扩展点)。

客户端扩展包 (myext.client) 的 plugin.xml 如果显示文本,文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
   <extension
         point="org.eclipse.scout.rt.extension.client.pages">
      <pageContribution
            active="true"
            class="myext.client.pages.MyPage"
            order="1">
         <outline
               class="mycore.client.ui.desktop.outlines.MyOutline">
         </outline>
      </pageContribution>
   </extension>
</plugin>

使用顺序字段,您可以指示页面列表中的位置(这样您就可以在列表中间插入页面)。

您还可以注册:

  • pageModification
  • pageRemoval

...取决于您的需要。

另请查看此论坛 Post,我在其中描述了您如何以相同的方式贡献 MenuMulti Module - Menu Extension


另请注意,对于 Mars(从 4.2 版开始),我们引入了另一种可扩展性机制。查看此维基页面以了解更多信息:Scout Concepts - Extensibility.

这个新机制比我们在 Kepler (Scout 3.9) 中引入的机制更强大。 Mars 版本同时支持新旧扩展模式。从长远来看,我认为只会支持新模式。