在 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,我在其中描述了您如何以相同的方式贡献 Menu
:Multi Module - Menu Extension
另请注意,对于 Mars(从 4.2 版开始),我们引入了另一种可扩展性机制。查看此维基页面以了解更多信息:Scout Concepts - Extensibility.
这个新机制比我们在 Kepler (Scout 3.9) 中引入的机制更强大。 Mars 版本同时支持新旧扩展模式。从长远来看,我认为只会支持新模式。
由于 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函数中添加。
我不怀疑你的
在您的扩展程序中,您根本不需要 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,我在其中描述了您如何以相同的方式贡献 Menu
:Multi Module - Menu Extension
另请注意,对于 Mars(从 4.2 版开始),我们引入了另一种可扩展性机制。查看此维基页面以了解更多信息:Scout Concepts - Extensibility.
这个新机制比我们在 Kepler (Scout 3.9) 中引入的机制更强大。 Mars 版本同时支持新旧扩展模式。从长远来看,我认为只会支持新模式。