- 浏览: 259173 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zoukaiwolai:
...
Java 16进制字符串与2进制字符串相互转换 -
sooxin:
j2ee的事务对连接有自己的管理机制,包括建立和关闭。没进j2 ...
c3p0 spring 包没进事务管理,连接池就不能释放 -
sooxin:
mina 采用一种NIO通信,底层的连接机制没有具体研究过,但 ...
转 Mina框架在项目中的使用 -
tywo45:
写得很好,希望博主把格式调一下!
Tomcat性能参数设置介绍 -
freecode:
采用了cp30,项目中出现很多未关闭的连接,一直在找原因.
c3p0 spring 包没进事务管理,连接池就不能释放
时下,国人都热衷于开源框架,其实很多开源框架并不实用,开源框架成千上万,好用的还是少数,有时候,真得还要靠自己去造一些轮子。在Flex开发领域,较有名气的框架有两个,Cairongorm和pureMvc,在2007年的时候我曾在博客上分享了这两个框架的一些资料。
但经过一段时间的实践,我认为这些框架均不实用。
cairongorm过于死板,完成一个工作需要N多类,做很多事情都是在舍近求远。
pureMvc虽然比较灵活,考虑了视图的复用。但是工程大而视图复用很少的时候,使用这个框架非常不合适。当实在需要视图复用时,可以考虑使用pureMvc框架。另外,使用pureMvc要注意在你的窗口关闭时要及时清除已经注册的资源,否则会导致内存泄露。
以上还都是小问题,大问题在于,不论cairongorm和pureMvc,都是基于事件(消息),一个事件(消息)发出后,就很难知道那些组件对这些事件和消息感兴趣,也很难知道那个组件对这个消息或者事件进行了监听和处理。造成程序的调试和维护相当困难。很多隐藏的BUg都是因此而产生的。
所以建议不要使用这两个框架。我们在项目中因使用pureMvc吃了很多苦头,希望后来者重视。
我建议开发者按照如下思路进行Flex开发,也是按照MVC思路设计的。
- 1.写一个mxml文件和一个as文件,二者名称相同但是扩展名不同。
- 2.mxml文件作为视图和视图控制控制器(视图跳转、弹出的逻辑放在MXML文件中,因为子视图的弹出往往需要主视图作为参数),as文件作为model。model上定义视图所需要的数据和数据的处理逻辑(比如,获取远程的数据等)。mxml上的控件绑定model上的数据。model无需知道mxml,mxml在创建时需要引用model。
- 3.当用户操作界面发生请求需要处理数据时,mxml上的响应控件事件的处理函数调用model上的方法,改变数据,改变后的数据通过绑定功能自动地刷新界面(mxml所生成的swf)。
这样做的最大好处就是便于调试,其次是把视图部分和数据以及数据处理部分分离,当视图上的控件发生变化不会影响数据处理的业务。
具体的例子如下:
这是一个视图的MXML,用来实现通用“资源”选择。包括全选、反选,按下确定按钮就会返回已被选择的资源数据。这里的<MinizableTitleWindow>是一个自定义组件,可以帮它当做panel。
- <?xml version="1.0" encoding="utf-8"?>
- <MinizableTitleWindow
- xmlns="com.xdfsoft.controls.*"
- xmlns:mx="http://www.adobe.com/2006/mxml" width="500" height="400"
- showMinimizeButton="false" title="资源选择">
- <mx:Script>
- <![CDATA[
- import com.xdfsoft.right.model.ListResSelectModel;
- [Bindable]
- public var model:ListResSelectModel;
- ]]>
- </mx:Script>
- <mx:VBox width="100%" height="100%" verticalGap="0">
- <mx:Canvas width="100%" height="100%">
- <mx:DataGrid height="100%" width="100%" dataProvider="{this.model.resObjList}">
- <mx:columns>
- <mx:DataGridColumn headerText="选择" width="100" >
- <mx:itemRenderer>
- <mx:Component>
- <mx:VBox horizontalAlign="center" verticalAlign="middle">
- <mx:CheckBox click="{data.selected=!data.selected}" selected="{data.selected}" />
- </mx:VBox>
- </mx:Component>
- </mx:itemRenderer>
- </mx:DataGridColumn>
- <mx:DataGridColumn headerText="资源编号" width="200" dataField="resourceObjectCode"/>
- <mx:DataGridColumn headerText="资源名称" width="400" dataField="resourceObjectName"/>
- </mx:columns>
- </mx:DataGrid>
- </mx:Canvas>
- <mx:Canvas width="100%" height="12%">
- <mx:Button x="283" y="7" label="确定" click="{this.model.doSelectOk(this);}"/>
- <mx:Button x="358" y="7" label="取消" click="{this.model.doSelectCancel(this);}"/>
- <mx:LinkButton x="18" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="全选" click="{this.model.doSelectAll(1);}"/>
- <mx:LinkButton x="70" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="反向选择" click="{this.model.doSelectAll(2);}" />
- <mx:LinkButton x="146" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="清除选择" click="{this.model.doSelectAll(0);}"/>
- </mx:Canvas>
- </mx:VBox>
- </MinizableTitleWindow>
上面视图MXML对应的AS类模型如下:
- package com.xdfsoft.right.model
- {
- import com.xdfsoft.controls.MessageBox;
- import flash.events.Event;
- import flash.events.EventDispatcher;
- import mx.collections.ArrayCollection;
- import mx.core.IFlexDisplayObject;
- import mx.managers.PopUpManager;
- public class ListResSelectModel extends EventDispatcher
- {
- private var _resObjList:ArrayCollection=null;
- private var _onSelectOk:Function;
- private var _onSelectCancel:Function;
- private var _otherArgs:Array;
- public function ListResSelectModel(resObjList:ArrayCollection,onSelectOk:Function,onSelectCancel:Function=null,otherArgs:Array=null)
- {
- this.resObjList=resObjList;
- this._onSelectOk=onSelectOk;
- this._onSelectCancel=onSelectCancel;
- this._otherArgs=otherArgs;
- }
- [Bindable(event="resObjListChange")]
- public function get resObjList():ArrayCollection
- {
- return this._resObjList;
- }
- public function set resObjList(resObjList:ArrayCollection):void
- {
- if (this._resObjList==resObjList) return;
- this._resObjList=resObjList;
- dispatchEvent(new Event("resObjListChange"));
- }
- public function doSelectOk(window:IFlexDisplayObject):void
- {
- if (this._onSelectOk==null) return;
- var selResObjs:Array=this.getSelectResObjs();
- if (selResObjs.length==0)
- {
- MessageBox.note("请选择一个或者多个资源再执行此操作");
- return;
- }
- var args:Array=this._otherArgs.concat();
- args.splice(0,0,selResObjs);
- this._onSelectOk.apply(this,args);
- PopUpManager.removePopUp(window);
- }
- public function doSelectCancel(window:IFlexDisplayObject):void
- {
- if (this._onSelectCancel!=null)
- {
- this._onSelectCancel.apply(this);
- }
- PopUpManager.removePopUp(window);
- }
- private function getSelectResObjs():Array
- {
- var result:Array=new Array();
- if (this.resObjList==null) return result;
- for each(var resObj:ResourceObjVo in this.resObjList)
- {
- if (resObj.selected)
- {
- result.push(resObj);
- }
- }
- return result;
- }
- public function doSelectAll(flag:int):void
- {
- for each(var resObj:ResourceObjVo in this.resObjList)
- {
- switch(flag)
- {
- case 0:
- resObj.selected=false;
- break;
- case 1:
- resObj.selected=true;
- break;
- case 2:
- resObj.selected=!resObj.selected;
- break;
- }
- }
- }
- }
- }
除了这些之外,我觉得为了化简Flex的开发,大家可以自己动手造一些框架,比如说仿照Java Colleciton框架造AS下的Collection框架。造一个类库对远程调用进行封装,以简化远程调用。造一些常用窗口的MXML模板库,简化常用的维护、查询窗口的开发,.......通过构建这些针对应用开发中特定领域的框架对应用开发带来的简化远比用类似Cairongorm,pureMvc这些万能丹要好的多。我们需要的是开阔思路,不要被外国的轮子迷了眼,其实这些轮子代码不复杂,功能也不强大。
发表评论
-
小学语文课堂教学三维目标的制定和落实-广安齐祥娥
2019-07-06 11:31 15教学目标是教学过程中重要的一部分,它是教学的出发点 也是教学 ... -
air打包是去掉air前缀
2017-02-05 12:13 777air打包是去掉air前缀当用air导报生成apk是会自动在a ... -
Adobe AIR 3新特性
2012-04-24 11:15 1255自从2008年发布了第一 ... -
四川血战麻将pc版下载
2012-01-17 16:59 111见附件! -
四川血战麻将 v0.3 整装待发!
2012-01-09 21:40 80app 搜索关键字:四川血战麻将app store 地址:ht ... -
四川血战麻将 app store 正式上线!
2012-01-05 17:15 76四川麻将, 又称血战麻将, 采用四川地区流行的麻将打法, 尤其 ... -
Flex 数据绑定易犯的错误:普遍的误用和错误
2011-07-12 21:21 1060http://www.cnblogs.com/kakaflex ... -
flex缓存客户端
2011-05-05 20:53 780flex或者flash客户端的缓 ... -
flashbuiler4 格式化地址
2011-01-07 13:03 811http://flexformatter.googlecode ... -
Garbage Collection with Flex and Adobe Air
2010-10-28 15:43 1143I finally found some spare time ... -
分离MXML和AS
2010-04-26 09:40 1149package oreilly.cookbook { ... -
ACE框架在网络游戏服务器中的设计与应用
2010-04-19 21:26 2238陶 道,万旺根 (上海大 ... -
网络游戏同步
2010-04-19 21:24 1056同步在网络游戏中是非 ... -
关于完美的Flex应用框架的思考(Part 1 of 2)
2010-04-14 23:56 1120自Flex技术开始广泛应用以来,对于企业级Flex应用开发框架 ... -
Flash的socket在实际应用上需要注意的问题
2010-04-14 23:34 2220本文作者:奶瓶先生 转 ... -
转 RTMP协议理解
2010-04-14 16:18 6584一、基于TCP之上的高层协议;二、自定义新的包结构chunk; ... -
flex的Timer事件几点注意
2010-03-17 22:57 2116flex的Timer事件几点注意 1. 设定Timer的延 ... -
关于强引用和弱引用
2010-03-17 22:54 1622强引用:使用最普遍的引用。如果一个对象具有强引用,那就类似于必 ... -
关于MC的复制
2010-02-27 10:58 1757关于MC的复制一直都是 ... -
谜一样的TextField
2010-02-02 16:32 1206文章来之:http://hi.baidu.com/mr%5Fz ...
相关推荐
标题与描述概述的知识点是关于如何将Flex框架嵌入到JSP页面中,以实现更丰富的数据可视化功能,特别是图表的展示。以下是基于标题、描述、标签以及部分内容的详细解析和扩展。 ### Flex嵌入JSP开发心得 #### 1. ...
Flex是一种基于ActionScript 3.0的开源框架,主要用于创建富互联网应用程序(RIA),它可以构建在Adobe Flash Player或Adobe AIR之上。在这个特定的项目中,"Flex做的mp3完整播放器"是一个使用Flex技术实现的音乐...
我沉浸于学习Hibernate、Spring、Ajax和Flex等流行技术之中,深信这些工具的熟练使用代表了高超的技术水平。 然而,随着我逐渐深入到项目实践中,我开始意识到一个深刻的问题:技术追求不应仅限于学习和使用流行的...
通过实际操作,我对Flex界面开发、Hibernate数据持久化以及Oracle数据库管理有了更深入的体会。这些宝贵的经验,不仅让我对项目的整体架构有了更全面的了解,也使我能够在项目中扮演更重要的角色。 然而,自我反思...
可使用标准Windows元素创建图形用户界面(GUI)屏幕,包括框架窗口、会话、菜单、工具栏、标签、按钮、复选框、单选按钮、滚动条、滑动调节框、微调框、组合框、树列表、列表框、编辑框以及静态文本等。 通过现有...
功夫不负有心人,终于我找到一个聊天室的小例子,但是功能差的太远,于是我把这个例如一点点的研究,从一点也不懂到后来慢慢看懂,从对AJAX技术一无所知到根本熟练运用。接下来我就开始自己开发,到最后终于把它开发...
例如,`color`改变文本颜色,`font-size`调整字体大小,`margin`和`padding`处理元素间距,`display`决定元素的显示方式(如`block`、`inline`或`flex`)。CSS还有盒模型,包括内容、内边距、边框和外边距,理解这...
在`NickWolfe-Website-main`中,我们可以看到诸如`<html>`, `<head>`, `<title>`, `<body>`, `<header>`, `<nav>`, `<section>`, `<article>`, `<footer>`等元素的使用,这些都是构建网页的基本框架。 2. **头部...