`
qq123zhz
  • 浏览: 536236 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

flex osgi实现-potomac 个人翻译资料2

    博客分类:
  • Flex
阅读更多

 

Potomac Ui 5个高级别的抽象方式:Templates, Pages, Folders, Parts, and Actions

Templates:定义了应用程序的framenavigation,框架和导航。

 

template 是一个template 扩展点上的一个简单的扩展,创建一个ui组件,添加[Template] tag,模板的职责是为整个应用程序提供一个整体的framenavigation结构,它被作为一个顶级的flex 应用对象的子项。

模板的主要职责是管理和显示pages,没有强制的要求模板如何选择去显示pages,有些模板可能在navigator中使用tabs去显示pages,(例如默认的potomac_dark),有些模板可以使用ViewStack选择一次展现一个模板,也可以使用Accordion去显示pages,高级模板可以使用一些高级特效和动画在pages转换过程中,最终限制模板样式的是作者想象力。

 模板和potomac通讯是使用事件处理,模板需要编写事件的事件处理模板。

TemplateEvents

templateInitialize:在模板加载propertiesactions时触发

templateInitialize:当页面UI 选择器(例如:tab)创建时分发。模板事件包括所有的页面被打的必须的属性,打开页面并不意味着页面的UI组件应该被创建,只是当展示给用户时才创            建(i.e.calling the page#create()method)。延迟加载是必须的,如果设置时间的focus 属性   true 页面将被openedcreated

templateShowPage:编程实现去改变当前可视化的page时分发该事件,模板将改变可视化的   page(ex. change the selected tab in a tab navigator).

templateClosePage:编程实现去close页面时分发该事件。模板将remove关联的UI.(remove the   tab from the tab navigator)

templatePageDirtyChange:在page改变时,page内的多个part出现脏状态时分发该事件。这样 给与模板机会去使用“*”注释改page UI,去标识这个page没有被保存。

 

模板参数:

模板的一个重要功能是支持配置参数。因为模板会被多个应用重用,它必须允许不同的应用选择模板时去改变参数。模板参数通过[Template] tag 的“properties”属性去声明模板参数。模板属性可以在appManifest 编辑器中创建,最后配置参数进入到模板的templateInitialize 事件。

Demon

[Template(id="myTemplate",properties="logo:image,title:string,showMenu:boolean")]

Actions

 模板的另一个重要的职责是显示ActionsActions使用[Action] tag 声明,它决定模板以何种方式展示给用户。

 

Potomac darkTemplate.mxml:

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvasxmlns:test="potomac.ui.restricted.*"xmlns="potomac.ui.templates.dark.*"xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%"height="100%"resize="onResize(event)"backgroundColor="0x000000">
<mx:Metadata>
[Template(id="potomac_dark",properties="logo:image")]
</mx:Metadata>


<mx:Stylesource="tabs.css"/>
<mx:Script>
<![CDATA[
import potomac.ui.TemplateEvent;
import mx.managers.CursorManager;
import potomac.inject.InjectionEvent;
import potomac.inject.Injector;
import potomac.bundle.Extension;
import potomac.bundle.IBundleService;
import mx.events.ResizeEvent;
import mx.events.IndexChangedEvent;
import mx.core.Container;
import potomac.ui.Page;
import potomac.ui.PotomacUI;
import mx.events.ItemClickEvent;
import mx.events.FlexEvent;
[Inject]
public var _potomacUI:PotomacUI;
[Inject]
public var _bundleService:IBundleService;
[Inject]
public var _injector:Injector;

private var _busyCursors:int = 0;
[Handles(event="templateInitialize")]
public function onTemplateInitialize(e:TemplateEvent):void
{
logo.source = e.parameters.logo;
//load actions
var exts:Array = _bundleService.getExtensions("Action");
linkBar.dataProvider = exts;
linkBar.labelField = "label";
linkBar.iconField = "icon";
tabNav.validateNow();
}
[Handles(event="templateOpenPage")]
public function openPage(e:TemplateEvent):void
{
var kid:DynCanvas = new DynCanvas();
kid.label = e.descriptor.title;
kid.icon = e.descriptor.icon;
if (e.input != null)
{
if (e.input.title != null)
kid.label = e.input.title;
if (e.input.icon != null)
kid.icon = e.input.icon;
}
kid.pageDesc = e.descriptor;
kid.page = e.page;
kid.populated = false;
kid.input = e.input;
kid.options = e.options;
kid.dirty = false;
tabNav.addChild(kid);

if (e.setFocus)
tabNav.selectedChild = kid;

if (tabNav.selectedChild == kid)
loadPage(kid);
}
private function onTabChange(e:IndexChangedEvent):void
{
loadPage(e.relatedObject as DynCanvas);
}
private function loadPage(parent:DynCanvas):void
{
if (parent.populated == true)
return;
var pageUI:Container = parent.page.getContainer();
pageUI.percentHeight = 100;
pageUI.percentWidth = 100;
parent.addChild(pageUI);

tabNav.validateNow();
parent.page.create(parent.options);
parent.populated = true;
}

[Handles(event="templateShowPage")]
public function onShowPage(e:TemplateEvent):void
{
var tab:DynCanvas = getPageTab(e.page);
tabNav.selectedChild = tab;
}

[Handles(event="templateClosePage")]
public function onClosePage(e:TemplateEvent):void
{
var tab:DynCanvas = getPageTab(e.page);
tabNav.removeChild(tab);
if (tabNav.selectedChild != null)
{
loadPage(tabNav.selectedChild as DynCanvas);
}
}
[Handles(event="templatePageDirtyChange")]
public function onPageDirtyChange(e:TemplateEvent):void
{
var tab:DynCanvas = getPageTab(e.page);
if (tab == null)
return;
var dirty:Boolean = e.page.containsDirty();
if (dirty != tab.dirty)
{
if (dirty)
{
tab.label = "*" + tab.label;
}
else
{
tab.label = tab.label.substr(1);
}
}
tab.dirty = dirty;
}
private function getPageTab(page:Page):DynCanvas
{
var kids:Array = tabNav.getChildren();
for (var i:int = 0; i < kids.length; i++)
{
if (kids[i].page == page)
{
return kids[i] as DynCanvas;
}
}
return null;
}

private function onResize(e:ResizeEvent):void
{
tabNav.width = e.currentTarget.width - 20;
tabNav.height = e.currentTarget.height - 38;
linkBar.width = e.currentTarget.width - 62;
}
private function onLinkActivate(e:ItemClickEvent):void
{
var ext:Extension = e.item as Extension;
_busyCursors ++;
CursorManager.setBusyCursor();
_injector.getInstanceOfExtension(ext,onInstanceReady);
}
private function onInstanceReady(e:InjectionEvent):void
{
_busyCursors --;
if (_busyCursors == 0)
{
CursorManager.removeBusyCursor();
}
e.instance.run();
}
]]>
</mx:Script>
<BackgroundPatternwidth="100%"height ="100%"/>
<mx:Imageid="logo"x="10"y="10"width="565"height="50"scaleContent="false"/>
<mx:LinkBarstyleName="potomacLinkBar"x="62"y="35"width="375"height="25"id="linkBar"itemClick="onLinkActivate(event)">
</mx:LinkBar>
<mx:TabNavigatorid="tabNav"styleName="potomacTabNavigator"historyManagementEnabled="false"x="10"y="28"change="onTabChange(event)"width="351"height="113">
</mx:TabNavigator>
</mx:Canvas>
 

 

分享到:
评论

相关推荐

    flex osgi实现-potomac 实现页面与页面间数据传递和页面间各部分的数据传递

    Flex OSGi实现-Potomac框架:页面间通信与数据共享详解 在现代软件开发中,尤其是在企业级应用中,灵活、可扩展且模块化的架构变得至关重要。OSGi(Open Services Gateway Initiative)是一个用于Java的开放标准,...

    osgi-resource-locator-1.0.1-API文档-中文版.zip

    包含翻译后的API文档:osgi-resource-locator-1.0.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.glassfish.hk2:osgi-resource-locator:1.0.1; 标签:glassfish、osgi、resource、locator、hk2、jar包、...

    osgi-resource-locator-1.0.1-API文档-中英对照版.zip

    包含翻译后的API文档:osgi-resource-locator-1.0.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.glassfish.hk2:osgi-resource-locator:1.0.1; 标签:glassfish、osgi、resource、locator、hk2、...

    spring-osgi-1.2.1-with-dependencies.zip

    spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip

    spring-osgi-1.2.0-rc1-with-dependencies.zip

    "spring-osgi-1.2.0-rc1"是Spring OSGi的一个早期版本,"RC1"代表Release Candidate 1,意味着这是正式发布前的最后一个测试版本。在这个版本中,开发者可以期待一些新特性和改进,但同时也可能存在一些未发现的...

    spring-osgi-1.2.0-with-dependencies.zip

    spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip

    killbill-osgi-bundles-lib-slf4j-osgi-0.8.4.zip

    【标题】"killbill-osgi-bundles-lib-slf4j-osgi-0.8.4.zip" 是一个基于OSGi的 Kill Bill 库,其中包含了SLF4J(Simple Logging Facade for Java)的OSGi兼容版本。SLF4J是一个为各种日志框架提供简单抽象的接口,...

    carrot-osgi-anno-scr-make-2.0.1.zip

    《Carrot-OSGi-Annotation-SCR-Make:探索开源项目的OSGI服务组件构建》 在软件开发领域,OSGi(Open Services Gateway Initiative)是一种模块化系统和Java应用程序框架,它使得开发者能够创建可独立更新和重用的...

    spring-osgi-1.2.1-with-dependencies

    其中,"spring-osgi-1.0.2"可能是该版本的核心库文件,提供了实现Spring和OSGi集成的关键API和实现。 首先,Spring OSGi提供了服务注册和发现机制。在OSGi环境中,Spring应用可以将服务注册到OSGi服务注册表,其他...

    OSGi.NET-master.zip_c#osgi_osgi_osgi.net github_模块化

    2. **C#版OSGi**:OSGi通常与Java关联,但这里我们讨论的是.NET平台的实现,即OSGi.NET。它保留了OSGi的核心特性,如服务注册、模块化、生命周期管理,同时适应了C#和.NET Framework的编程模型。 3. **模块化开发**...

    OSGi -- Helloworld 学习记录一

    2. **创建bundle**:创建一个新的Java项目,并将其转换为OSGi bundle。这涉及配置MANIFEST.MF文件,声明类路径、导入和导出包,以及设置bundle的版本和其他元数据。 3. **编写代码**:实现一个简单的“HelloWorld”...

    OSGI进阶--OSGi开发指南

    OSGi开发文档和实践指南,描述了OSGI的开发流程

    OSGi Modularity - Tutorial

    2. 下载Eclipse插件包:说明了如何下载包含OSGi实现的Eclipse插件包。 3. 更新Eclipse Java IDE:解释了如何更新基于OSGi的Eclipse IDE,以便开发者可以开始使用OSGi模块化功能。 实践教程部分介绍: 1. 创建第一...

    OSGi-lib.rar

    标题"OSGi-lib.rar"暗示这是一个与OSGi相关的库文件集合,可能是为了开发OSGi应用或者研究OSGi技术而准备的资源包。描述中的重复信息"OSGi-lib.rar"可能是由于复制错误,但我们可以推测这个压缩包包含了关于OSGi的...

    atlassian-plugins-osgi-2.6.0.jar.zip

    在Atlassian-plugins-osgi-2.6.0.jar中,我们可以看到它包含了对Atlassian插件系统的OSGi实现,以及相关的依赖项。这些依赖项可能是Atlassian平台的基础组件,也可能是第三方库,它们共同构成了一个完整的运行环境。...

    maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar

    maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar

    spring-osgi-1.2.0.zip

    标题"spring-osgi-1.2.0.zip"表明这是一个包含Spring OSGi 1.2.0版本的压缩包。这个版本可能包含了Spring框架与OSGi集成的相关库、文档、示例代码等资源,便于开发者在OSGi环境中使用Spring。 描述中提到"spring1.2...

    Spring Dynamic Modules开发所需全部jar包

    spring-osgi-core-1.2.1.jar spring-osgi-core-1.2.1-sources.jar spring-osgi-extender-1.2.1.jar spring-osgi-extender-1.2.1-sources.jar spring-osgi-io-1.2.1.jar spring-osgi-io-1.2.1-sources.jar spring-...

    OSGI实战-若干问题.txt

    ### OSGI实战-若干问题解析 #### 一、OSGI环境配置与启动问题 **问题背景:** 根据文档描述,作者在学习OSGI时遇到了一些基础性的问题,特别是关于如何正确配置并运行一个基本的OSGI环境。文档中提到了使用...

Global site tag (gtag.js) - Google Analytics