- 浏览: 536274 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
gaolegao2008:
如果报 is_volum 列名找不到之类的,我是从新部署了一个 ...
spring quartz 定时器报错 -
gaolegao2008:
部署到linux上时,还有一种情况就是mysql数据库区分大小 ...
spring quartz 定时器报错 -
qq123zhz:
yahier 写道 对我有帮助,但我看的一个demo程序,却没 ...
spring quartz 定时器报错 -
qq123zhz:
这个要在eclipse的插件环境下运行的,你不懂eclipse ...
GEF 自动布局 -
qq123zhz:
这个很久了,不记得啥时候写的了
json转为Map
Potomac Ui 有5个高级别的抽象方式:Templates, Pages, Folders, Parts, and Actions。
Templates:定义了应用程序的frame和navigation,框架和导航。
template 是一个template 扩展点上的一个简单的扩展,创建一个ui组件,添加[Template] tag,模板的职责是为整个应用程序提供一个整体的frame和navigation结构,它被作为一个顶级的flex 应用对象的子项。
模板的主要职责是管理和显示pages,没有强制的要求模板如何选择去显示pages,有些模板可能在navigator中使用tabs去显示pages,(例如默认的potomac_dark),有些模板可以使用ViewStack选择一次展现一个模板,也可以使用Accordion去显示pages,高级模板可以使用一些高级特效和动画在pages转换过程中,最终限制模板样式的是作者想象力。
模板和potomac通讯是使用事件处理,模板需要编写事件的事件处理模板。
TemplateEvents:
templateInitialize:在模板加载properties和actions时触发
templateInitialize:当页面UI 选择器(例如:tab)创建时分发。模板事件包括所有的页面被打的必须的属性,打开页面并不意味着页面的UI组件应该被创建,只是当展示给用户时才创 建(i.e.calling the page#create()method)。延迟加载是必须的,如果设置时间的focus 属性 为true, 页面将被opened和created。
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:
模板的另一个重要的职责是显示Actions,Actions使用[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>
发表评论
-
对于swiz1.0框架的一点理解
2011-05-18 11:32 1177Swiz的核心是个简单的控制反转框架。借助于IoC框架,应用组 ... -
flex 强制viewStack更新
2011-05-12 15:24 2171viewStack 第一次创建后,后面viewStack切换 ... -
flex 任意组件添加鼠标手型
2011-05-09 16:03 2114<s:TextArea textFlow="{ ... -
flex 时区转换
2011-05-06 15:29 1301public static function getTimeZ ... -
关于在s:Application 使用mx:DataGrid
2011-05-05 16:24 993在flex4中使用mx:DataGrid ,不支持内联的Da ... -
原来<s:ComboBox>已经出来了
2011-04-27 14:40 1232最近做的项目需要可编辑的下拉列表,以前google发现只有d ... -
s:DataGrid与mx:DataGrid
2011-04-22 15:59 3095<s:DataGrid id="showGr ... -
AIR 居中
2011-04-21 13:54 1166youWin.nativeWindow.x = (Capabi ... -
swiz 元标签[EventHandler]
2011-04-19 14:40 1144[EventHandler( event="User ... -
flex4 AIR titleBar问题
2011-04-13 16:14 1609flex3 AIR中 windedApplication有sh ... -
flex 国际化参数
2011-04-11 11:41 1206-locale zh_CN -locale en_US - ... -
swiz 弹出框的处理
2011-04-06 12:54 1091由于swiz框架的事件是基于冒泡的,而且它 it was ... -
flex 4 工具栏
2011-04-02 15:16 2517flex 4 WEB模式下的工具栏,能正常运行。 <? ... -
flex 的反射要事先声明.......为什么?
2011-03-03 12:29 1032Flex的反射有点假,你必须先声明一下才能反射的到。为什么?? ... -
as 数组去重复元素
2011-02-16 09:38 1244var a:Array=new Array("a&q ... -
(flex4): addChild() is not available in this class.
2011-02-15 14:01 1913flex4中: just create another co ... -
BulkLoader 多文件加载库(转)
2011-02-14 12:21 2739在BulkLoader 的 add方法中 ... -
关于blazeds的Channel/endpoint的介绍
2011-02-11 10:29 1631AMFChannel/AMFEndpoint: 简单的通道传输 ... -
blazeds 自带的日志记录功能
2011-02-09 16:40 2877在mxml添加<mx:TraceTarget leve ... -
查看MXML文件所翻译的ActionScript代码
2011-01-21 15:40 1105项目属性——》Flex编译器 -locale zh_CN ...
相关推荐
Flex OSGi实现-Potomac框架:页面间通信与数据共享详解 在现代软件开发中,尤其是在企业级应用中,灵活、可扩展且模块化的架构变得至关重要。OSGi(Open Services Gateway Initiative)是一个用于Java的开放标准,...
包含翻译后的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包、...
包含翻译后的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.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
【标题】"killbill-osgi-bundles-lib-slf4j-osgi-0.8.4.zip" 是一个基于OSGi的 Kill Bill 库,其中包含了SLF4J(Simple Logging Facade for Java)的OSGi兼容版本。SLF4J是一个为各种日志框架提供简单抽象的接口,...
《Carrot-OSGi-Annotation-SCR-Make:探索开源项目的OSGI服务组件构建》 在软件开发领域,OSGi(Open Services Gateway Initiative)是一种模块化系统和Java应用程序框架,它使得开发者能够创建可独立更新和重用的...
其中,"spring-osgi-1.0.2"可能是该版本的核心库文件,提供了实现Spring和OSGi集成的关键API和实现。 首先,Spring OSGi提供了服务注册和发现机制。在OSGi环境中,Spring应用可以将服务注册到OSGi服务注册表,其他...
2. **C#版OSGi**:OSGi通常与Java关联,但这里我们讨论的是.NET平台的实现,即OSGi.NET。它保留了OSGi的核心特性,如服务注册、模块化、生命周期管理,同时适应了C#和.NET Framework的编程模型。 3. **模块化开发**...
2. **创建bundle**:创建一个新的Java项目,并将其转换为OSGi bundle。这涉及配置MANIFEST.MF文件,声明类路径、导入和导出包,以及设置bundle的版本和其他元数据。 3. **编写代码**:实现一个简单的“HelloWorld”...
OSGi开发文档和实践指南,描述了OSGI的开发流程
2. 下载Eclipse插件包:说明了如何下载包含OSGi实现的Eclipse插件包。 3. 更新Eclipse Java IDE:解释了如何更新基于OSGi的Eclipse IDE,以便开发者可以开始使用OSGi模块化功能。 实践教程部分介绍: 1. 创建第一...
标题"OSGi-lib.rar"暗示这是一个与OSGi相关的库文件集合,可能是为了开发OSGi应用或者研究OSGi技术而准备的资源包。描述中的重复信息"OSGi-lib.rar"可能是由于复制错误,但我们可以推测这个压缩包包含了关于OSGi的...
在Atlassian-plugins-osgi-2.6.0.jar中,我们可以看到它包含了对Atlassian插件系统的OSGi实现,以及相关的依赖项。这些依赖项可能是Atlassian平台的基础组件,也可能是第三方库,它们共同构成了一个完整的运行环境。...
maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar
标题"spring-osgi-1.2.0.zip"表明这是一个包含Spring OSGi 1.2.0版本的压缩包。这个版本可能包含了Spring框架与OSGi集成的相关库、文档、示例代码等资源,便于开发者在OSGi环境中使用Spring。 描述中提到"spring1.2...
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实战-若干问题解析 #### 一、OSGI环境配置与启动问题 **问题背景:** 根据文档描述,作者在学习OSGI时遇到了一些基础性的问题,特别是关于如何正确配置并运行一个基本的OSGI环境。文档中提到了使用...