在Eclipse Scout Luna中如何在父级中添加扩展页面?

时间:2015-02-20 08:48:20

标签: eclipse-scout

由于Scout支持项目的模块化,我们决定模块化。问题是当我们向项目添加大纲时:如何将页面添加到该大纲,但是当子项目中存在页面时。添加页面以概述轮廓内部生命的功能,问题是我们不应该让父项依赖于子项,因为我们将在依赖项中获得循环。

大纲的类型为AbstractExtensibleOutline,可能支持基于类标题中的名称和注释的扩展/扩展,但我还没有弄清楚在哪里以及如何做到这一点。

2 个答案:

答案 0 :(得分:2)

我不怀疑你的programmatically solution是否有效,但我想提出另一个使用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(使用{ {1}}扩展点)。

Plugin Editor - Eclipse

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

<?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>

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

您还可以注册:

  • pageModification
  • pageRemoval

......取决于您的需求。

另请查看此论坛帖子,其中我描述了您如何以同样的方式提供MenuMulti Module - Menu Extension


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

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

答案 1 :(得分:0)

如果扩展项目,最终会使用Desktop Extension而不是Desktop。

桌面扩展在父桌面之后初始化,因此您可以预期父桌面内的大纲已经准备好。

所以说你有这种结构:

Core Project
        |
        -- Desktop
               |
               -- MyOutline

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

因此,在Desktop扩展中的Extended Project中,您需要覆盖init函数

@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将被添加到所有大纲中。如果要添加特定用途instanceof函数。