由于Scout支持项目的模块化,我们决定模块化。问题是当我们向项目添加大纲时:如何将页面添加到该大纲,但是当子项目中存在页面时。添加页面以概述轮廓内部生命的功能,问题是我们不应该让父项依赖于子项,因为我们将在依赖项中获得循环。
大纲的类型为AbstractExtensibleOutline,可能支持基于类标题中的名称和注释的扩展/扩展,但我还没有弄清楚在哪里以及如何做到这一点。
答案 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.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
......取决于您的需求。
另请查看此论坛帖子,其中我描述了您如何以同样的方式提供Menu
:Multi 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函数。