RIAMeeting第九次会议现场纪实及资料下载

8 views
Skip to first unread message

shaorui guo

unread,
Feb 23, 2009, 8:56:02 PM2/23/09
to china-rich-me...@googlegroups.com

RIAMeeting第九次会议在上周六圆满举办了,或许大家参会之后的感觉应该是,Spring Action Script并不神秘,它拥有的比较完善的设计思想应该对大家的项目开发是很有裨益的。应大家的要求,将会议所用的演讲稿和示例的源码发布出来,给大 家分享一下。

不过遵循惯例,先发一下现场的照片 :

img_1012.jpg     img_1017.jpg     img_1018_ps.jpg

img_1025.jpg     img_1032.jpg

PPT和源码,还有相关技术资料,在这里下载:

1.Spring Action Script(PPT讲稿)

2.示例文件(源码)

3.Flex中的依赖注入(相关文档)

4.现场视频1

5.现场视频2

注:第三个文档来自Adobe Developers Center,感谢孙泉同学的翻译

参考:http://www.adobe.com/devnet/flex/articles/dependency_injection.html


详细信息:
http://www.riameeting.cn/?p=135

wangpingsx

unread,
Feb 24, 2009, 9:04:39 AM2/24/09
to RIAMeeting Discussion
关于此框架中对于反射的处理我很感兴趣, 本以为as3reflect己经解决反射问题,但我昨天晚上看过as3reflect的原码之后才发现,依然
有 ------- throw new ClassNotFoundError("A class with the name '" +
name + "' could not be found."); 的问题, 也就是说,如果您想通过类名反射一个类, 那就必须要在反射之前至少声
明一下此类。
所以我一直期待聚会中代码的公布,刚刚下载了并运行了,出现以下错误:

Error: A class with the name 'mx.rpc.http.mxml.HTTPService' could not
be found.

我引入代码、运行代码的方式:
我把sample1的代码引入,然后把SampleLib的代码直接copy到了sample1里。 在sample1里把对SampleLib的依赖
去掉。这样代码就可以编译通过了。

这样运行之后就报 “Error: A class with the name
'mx.rpc.http.mxml.HTTPService' could not be found.”

当我把以下代码加到LoadDataGridDataInDifferentFormat.mxml 之中就好了:


public var x1:UserGridNotifyable;
public var x2:HTTPServiceDelegate;
public var x3:UserInfoCSVParser;
public var x4:ViewAddToStagePostProcessor;
public var x5:UserInfoXMLParser;

能不能解释一下?是不是我引入代码的方式有问题?

Bill Lee

unread,
Feb 24, 2009, 9:16:11 AM2/24/09
to china-rich-me...@googlegroups.com
你的做法没有错,AS3的反射跟Java反射是一样的。
如果FlashPlayer找不到一个类的定义,他肯定是不可能通过反射的方法得到类实例的。

只是在Flash中,我们的处理方法和Java中有点不同,java中,你要保证你的类定义在classpath中,而在FlashPlayer中,你要保证你的类定义能够被FlashPlayer找到。

我们的做法是使用一个Lib项目把核心的类都编译到一个swc库中,然后在主运行项目下,添加编译参数 -include-libraries ../../SampleLib/bin/SampleLib.swc"
来确保所依赖的类都被编译进去。

另外一个做法,就是使用RSL方式。即同样,需要把核心类以及引用都放到一个Lib项目中,如SampleLib。
然后,在主运行项目下,把对SampleLib的依赖选为RSL方式。
我们建议你把Flex Framework以RSL的方式引入,因为不光你,许多人可能都会这样做,而FlashPlayer在很大程度上已经将整个FlexFramework都缓存在本地了,这样,你的项目本身不需要任何Flex框架的代码依赖。

不管怎么做,肯定存在一个由你自己来把依赖都找齐的过程,有人用ant去做,我们介绍的方式也是其中一种。
希望对你有用

2009/2/24 wangpingsx <msnwa...@hotmail.com>



--
Bill Lee
Li WenLei

Bill

unread,
Feb 24, 2009, 9:26:28 AM2/24/09
to RIAMeeting Discussion
补充一个FlexBuilder中 Flex项目下的一个默认行为。

你写出任何代码,在Flex项目中,如果没有一个能够运行的主文件用到它。他们是不会被编译器编译的。甚至不会做语法检查。
所以,那个主运行文件:LoadDataGridDataInDifferentFormat.mxml 没有引用到的任何类,都是不会被编译器自动
添加的。


On 2月24日, 下午10时16分, Bill Lee <lwlu...@gmail.com> wrote:
> 你的做法没有错,AS3的反射跟Java反射是一样的。
> 如果FlashPlayer找不到一个类的定义,他肯定是不可能通过反射的方法得到类实例的。
>
> 只是在Flash中,我们的处理方法和Java中有点不同,java中,你要保证你的类定义在classpath中,而在FlashPlayer中,你要保证你的类定义能够被FlashPlayer找到。
>
> 我们的做法是使用一个Lib项目把核心的类都编译到一个swc库中,然后在主运行项目下,添加编译参数 -include-libraries
> ../../SampleLib/bin/SampleLib.swc"
> 来确保所依赖的类都被编译进去。
>
> 另外一个做法,就是使用RSL方式。即同样,需要把核心类以及引用都放到一个Lib项目中,如SampleLib。
> 然后,在主运行项目下,把对SampleLib的依赖选为RSL方式。
> 我们建议你把Flex
> Framework以RSL的方式引入,因为不光你,许多人可能都会这样做,而FlashPlayer在很大程度上已经将整个FlexFramework都缓存在本地了,这样,你的项目本身不需要任何Flex框架的代码依赖。
>
> 不管怎么做,肯定存在一个由你自己来把依赖都找齐的过程,有人用ant去做,我们介绍的方式也是其中一种。
> 希望对你有用
>

> 2009/2/24 wangpingsx <msnwangp...@hotmail.com>

Message has been deleted

wangpingsx

unread,
Feb 24, 2009, 11:01:46 PM2/24/09
to RIAMeeting Discussion
首先感谢您的回复.


添加编译参数 -include-libraries ../../SampleLib/bin/SampleLib.swc" 这样方式, 我还是
第一次看到,以前没用过。 不过这样就相当于把swc的代码完全build到了生成的swf中, 这样会使swf变大。
我更喜欢RSL 方式, 于是我把“SampleLib.swc”设为RSL了, 但报别的错了:

TypeError: Error #1007: 尝试实例化的函数不是构造函数。
at mx.controls.dataGridClasses::DataGridHeader/updateDisplayList()[E:
\dev\3.0.x\frameworks\projects\framework\src\mx\controls
\dataGridClasses\DataGridHeader.as:240]
at mx.core::UIComponent/validateDisplayList()[E:\dev\3.0.x\frameworks
\projects\framework\src\mx\core\UIComponent.as:6214]
at mx.managers::LayoutManager/validateClient()[E:\dev\3.0.x\frameworks
\projects\framework\src\mx\managers\LayoutManager.as:860]
at mx.core::UIComponent/validateNow()[E:\dev\3.0.x\frameworks\projects
\framework\src\mx\core\UIComponent.as:5550]
at mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[E:
\dev\3.0.x\frameworks\projects\framework\src\mx\controls
\dataGridClasses\DataGridBase.as:490]
at mx.controls::DataGrid/updateDisplayList()[E:\dev\3.0.x\frameworks
\projects\framework\src\mx\controls\DataGrid.as:1435]
at mx.controls.listClasses::ListBase/validateDisplayList()[E:\dev
\3.0.x\frameworks\projects\framework\src\mx\controls\listClasses
\ListBase.as:3281]
at mx.managers::LayoutManager/validateDisplayList()[E:\dev\3.0.x
\frameworks\projects\framework\src\mx\managers\LayoutManager.as:602]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\3.0.x
\frameworks\projects\framework\src\mx\managers\LayoutManager.as:675]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()[E:\dev\3.0.x\frameworks
\projects\framework\src\mx\core\UIComponent.as:8460]
at mx.core::UIComponent/callLaterDispatcher()[E:\dev\3.0.x\frameworks
\projects\framework\src\mx\core\UIComponent.as:8403]






yiyifla...@163.com

unread,
Feb 24, 2009, 11:11:26 PM2/24/09
to RIAMeeting Discussion
- -
部分实现总比不能实现要好。

当然,多余的体积是无法避免的,RSL只能解决framework涉及到的问题而不是全部,强制导入库必然会产生多余体积,而如果完全不产生多余体积,
那loc也就没有任何意义。

从来没有任何人要求必须在所有的AS项目中应用LOC,这是一个提供的选择,而不是建议或者升级。

而且,对于主要用于企业网的项目来说,多余的体积显然并不是什么太大的问题。

Vince Bin

unread,
Feb 24, 2009, 11:11:23 PM2/24/09
to china-rich-me...@googlegroups.com
如果有一个文件改动,哪怕是空格,也会所有都编译一般是吧!,那这样有些太慢了.

--- 09年2月24日,周二, Bill <lwl...@gmail.com> 写道:
发件人: Bill <lwl...@gmail.com>
主题: Re: RIAMeeting第九次会议现场纪实及资料下载
收件人: "RIAMeeting Discussion" <china-rich-me...@googlegroups.com>
日期: 2009,224,周二,10:26下午


好玩贺卡等你发,邮箱贺卡全新上线!

yiyifla...@163.com

unread,
Feb 25, 2009, 12:07:36 AM2/25/09
to RIAMeeting Discussion
出错在这里,实例化skin时,失败。

if (FlexVersion.compatibilityVersion >= FlexVersion.VERSION_3_0)
{
var headerBGSkinClass:Class = getStyle
("headerBackgroundSkin");
******* var headerBGSkin:IFlexDisplayObject = new
headerBGSkinClass();

if (headerBGSkin is ISimpleStyleClient)
ISimpleStyleClient(headerBGSkin).styleName = this;
headerBG.addChild(DisplayObject(headerBGSkin));
}

个人认为,这可能和你的皮肤有关。由于控件代码被加入RSL,而皮肤没有被导入,不一定能够成功进行皮肤的反射……
当然,这只是猜测。

wangpingsx

unread,
Feb 25, 2009, 12:31:47 AM2/25/09
to RIAMeeting Discussion
yiyiflashstu...@163.com哥, 很感谢您的回复。

我只是想验证一下Bill哥说的,第二种方法(另外一个做法,就是使用RSL方式。即同样,需要把核心类以及引用都放到一个Lib项目中,如
SampleLib。
然后,在主运行项目下,把对SampleLib的依赖选为RSL方式。 )

您提到我的错误可能和皮肤有关, 可是我的代码没有用到什么皮肤有关的东西,而且,我的代码就是 shaorui 哥在一楼发出的代码呀。

能帮我确认一下, Bill哥说的第二种方法的可行性吗?

On 2月25日, 下午1时07分, yiyiflashstu...@163.com wrote:
> 出错在这里,实例化skin时,失败。
>
> if (FlexVersion.compatibilityVersion >= FlexVersion.VERSION_3_0)
> {
> var headerBGSkinClass:Class = getStyle
> ("headerBackgroundSkin");
> ******* var headerBGSkin:IFlexDisplayObject = new
> headerBGSkinClass();
>
> if (headerBGSkin is ISimpleStyleClient)
> ISimpleStyleClient(headerBGSkin).styleName = this;
> headerBG.addChild(DisplayObject(headerBGSkin));
> }
>

> 个人认为,这可能和你的皮肤有关。由于控件代码被加入RSL,而皮肤没有被导入,不一定能够成功进行皮肤的反射......

猫粮

unread,
Feb 26, 2009, 1:02:24 AM2/26/09
to china-rich-me...@googlegroups.com
RSL会加快载入速度只是建立在大家都用RSL做产品的美好愿望上的。

就我们公司而言,采用RSL会这样的后果:
1。增加了整体的体积,导致载入时间加长
2。增加了请求的次数,会有多余的时间浪费在握手上。
这两点直接导致了page load time无意义地延长的问题。谁愿意等一个程序加载超过20秒呢?当然如果是内网应用,这点又可以忽略,但是如果是内网应用,直接用Air或者是传统的桌面应用程序是不是更好呢?


2009/2/25 wangpingsx <msnwa...@hotmail.com>



--
从那一天起,没有改变的依然没有改变

Bill Lee

unread,
Feb 26, 2009, 2:36:17 AM2/26/09
to china-rich-me...@googlegroups.com
在Web上使用RSL是有前提的,针对你说的那两点:

1,当一个库比较稳定,而且又大到一定程度的时候(比如你用到的第三方的类库),才推荐使用RSL库或者DLL方式,这个体积的增加只需要一次加载。 而且,跟你公司自己的代码隔离开来,当你公司代码本身在不停更改的时候,保证了只需要下载改动代码,而不是全部稳定的代码库。

2,关于增加请求次数这里,其实如果真的项目比较大,必然会涉及到拆解整个项目,分别单独编译的问题,分别加载的问题。
只是说,你想用dll的方式,还是想用rsl的方式罢了。 如果一个项目大到一定程度,还是一个单独的SWF,那样的说实在的用户体验更不好。


所以,如果总结一下的话,拆分SWF成RSL或者DLL方式的前提就是
1,项目比较大
2,功能模块设计区分比较好,可以独立分拆,独立编译,独立加载。


另,猫粮,我知道你的,原来在FlashSeer上跟你聊过还。只是后来iiley和我都没空搞了,就一直荒废在那里了。
有空还是要保持联系啊

猫粮

unread,
Feb 26, 2009, 3:18:32 AM2/26/09
to china-rich-me...@googlegroups.com
其实我是更偏向于让google像支持ajax库这样来支持rsl库,这时候rsl才真正能体现出它的威力阿…
不过怎么说服Tester又是另外一回事,哈哈。

至于公司成熟的类库,除非程序中相当大量地使用,不然实在不值得。
这些东西,到头来还是要看实际使用的情景,可以动手脚的地方太多了,也不必一成不变地按照RSL这样的方法,在程序启动之前就把所有RSL给加载好,可以留一部分暂时不需要使用的在程序起来后再进行加载。

另:嗯,小事太多了,经常被打断,其实真正用来工作的时间并不会太多。
现在FlashSeer的QQ群还在,有空的话就上来聊聊吧

yiyifla...@163.com

unread,
Feb 26, 2009, 7:43:43 AM2/26/09
to RIAMeeting Discussion
其实FLEX本身就是有一个默认皮肤的,就在sdks\3.1.0\frameworks\themes\HaloClassic
\haloclassic.swc
可你出错的位置,除了反射不到,我想不出别的可能了。

而且RSL用在自己的类库上,我觉得没必要。你的自定义类既然写出来了,正常情况下都会用吧,这种就没必要弄RSL了。

我现在说闲不闲说忙不忙,测试这东西......还是不怎么想- -

> > > \projects\framework\src\mx\core\UIComponent.as:8403]- 隐藏被引用文字 -
>
> - 显示引用的文字 -

yiyifla...@163.com

unread,
Feb 26, 2009, 8:20:05 AM2/26/09
to RIAMeeting Discussion
我对FLEX现在的态度,就是用在桌面或者企业网上。公网上不是不可以,但问题是很明白的,就看合不合算。
局域网上,FLEX有很大的空间可以发挥,我们没必要挤到公网上碰钉子,毕竟这里是中国。

FLEX要想在公网上发展,必须由先行者铺平道路,让RSL能够拥有一个普及率而不是现在的0%。否则,的确问题很大。可是同样的,有的时候使用RSL
完全是无奈之举,因为项目一大,公网上使用就必须分Module,而分了Module就必须使用RSL(原因不用我说明了吧),如果不用RSL,需要用
户多等待的可就不是500K这种程度的问题了。可是如果FLEX项目不上规模,我们为什么要用它?
这就是个矛盾。最终的结果,我们还是得用,否则我们就应该放弃FLEX。

回过头来讲,以前的FLASH网站可一点都不小,为什么还是有些公司愿意做,而且效果不错呢?因为相比等待所损失的用户,因为视觉效果而拉拢的用户更
多。我们不能光看到缺点,而忽略优点。因此,现在即使说要用FLEX做网站,我也是不反对的,但首要的前提是,我们必须通过其他方式来挽回因为等待而造
成的用户流失。
所以,这要看项目的具体内容而定。有的时候,就应该使用AJAX,或者纯FLASH,而FLEX,也绝对不是一无是处的。

--------------------------------------------------------------------------------------------------------

其实,猫娘你前面说的是framework需要做RSL的问题吗- -好像下面讲的是项目的类库需不需要RSL。。
这是两码事吧。
呵呵,话虽然说这么说,我自己确实不会用FLEX做公网上的东西,宁愿费事用FLASH一点一点写。至少从阻力上来讲,这样会小很多。不管用户接受不接
受,首先得让我们自己的人接受啊。。。

你提到google,的确是- -某种出路,我对这个机制不了解。


猫粮,你不是在上海么?咋跑这来了?


On 2月26日, 下午4时18分, 猫粮 <dark...@gmail.com> wrote:
> 其实我是更偏向于让google像支持ajax库这样来支持rsl库,这时候rsl才真正能体现出它的威力阿...


> 不过怎么说服Tester又是另外一回事,哈哈。
>
> 至于公司成熟的类库,除非程序中相当大量地使用,不然实在不值得。

> 这些东西,到头来还是要看实际使用的情景,可以动手脚的地方太多了,也不必一成不变地按照RSL这样的方法,在程序启动之前就把所有RSL给加载好,可以留一部-分暂时不需要使用的在程序起来后再进行加载。

wangpingsx

unread,
Feb 26, 2009, 10:26:53 AM2/26/09
to RIAMeeting Discussion
对于RSL看过你们的帖子之后让我觉得有点儿晕,我来总结一下, 你们看看对不:

1 FLex之所以大是因为,如果你只是开发一个很简单的页面, 因为在编译时会根据需要,把frameWork里或flex.swc或
rpc.swc,utilities.swc等包里的一些类也编译进来,所以你就觉得产生的swf大了。
2 此时swf 大小 = 一个简页面 + 其它swc中部分类 < 一个简单页面+ frameWork.swc等其它包
3 但如果这时候你就用RSL,并不能提高你的加截速度,因为RSL是按需加载的,这里的按需加载的最小单元是一个swc包,所以在页面加载之初,系统
把frameWork.swc等其它包完全加载进去,通过"2"中的式子可以看出现在加载的东西明显的比“1”中大很多;
4 但如果你的程序很大(如有50个页面),就又不一样了,一次性把整个程序加进来自然耗时, 而且有时用户可能就到程序中的一个页面,但也要把程序加
进来,这显然是一件费力不讨好的事,所以我们用了moduel和RSL,这样类和页面是在需要时才被加载,如系统默认只显示首页,当用户看其它页面时再
加载其它页面和用到的包。
5 为什么项目的其它模块使用了RSL就必须要把FrameWork或其它一些别的核心包也RSL呢?是因为如果核心包是merge into 那么系
统只会按主程序的需要把部分核心包中的代码merge到产生的swf中,如果项目的其它模块用到了其它的核心代码,自然会报找不类的错误。当然你可以把
FrameWork等核心包merge into 到子项目中,但我们一般在主模块中使用RSL联接核心包,在其它模块声明这些核心包是
external的。

是这样的吧?

谢指点。

wangpingsx

unread,
Feb 26, 2009, 9:47:47 AM2/26/09
to RIAMeeting Discussion
感谢你的回答,我只是想证明一下RSL 的方式确实可以解决反射时出错的问题。

至于你说皮肤的问题,我之前没有动过它们,我想应该不是这里的错误。 其实解决这个错误不是我的目地,我只是想知道RSL是不是真的可以解决反射问
题。

您能给我一个回答吗?

谢谢!


yiyiflashstu...@163.com 写道:

猫粮

unread,
Feb 26, 2009, 10:03:28 AM2/26/09
to china-rich-me...@googlegroups.com
猫粮还在上海,北京的开发者还是认识的,只是平时聊得较少,前辈们都比较忙…

Flex嘛…我是Aswing的死忠,哈哈

话说iiley在这个group里面么,我要给他道个歉,猫粮手头琐事多,没能尽则,很是抱歉…

关于类库,无论大小,我都使用类Module的形式+linkReport。

yiyifla...@163.com

unread,
Feb 26, 2009, 9:17:13 PM2/26/09
to RIAMeeting Discussion
这里有Bill Lee..轮不到我来班门弄斧吧?
何况我其实也算是个初学者,这只是我的一点看法。

RSL的具体实现部分我也没看

Reply all
Reply to author
Forward
0 new messages