RIAMeeting第九次会议在上周六圆满举办了,或许大家参会之后的感觉应该是,Spring Action Script并不神秘,它拥有的比较完善的设计思想应该对大家的项目开发是很有裨益的。应大家的要求,将会议所用的演讲稿和示例的源码发布出来,给大 家分享一下。
不过遵循惯例,先发一下现场的照片 :
PPT和源码,还有相关技术资料,在这里下载:
2.示例文件(源码)
4.现场视频1
5.现场视频2
注:第三个文档来自Adobe Developers Center,感谢孙泉同学的翻译
参考:http://www.adobe.com/devnet/flex/articles/dependency_injection.html
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;
能不能解释一下?是不是我引入代码的方式有问题?
你写出任何代码,在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>
当然,多余的体积是无法避免的,RSL只能解决framework涉及到的问题而不是全部,强制导入库必然会产生多余体积,而如果完全不产生多余体积,
那loc也就没有任何意义。
从来没有任何人要求必须在所有的AS项目中应用LOC,这是一个提供的选择,而不是建议或者升级。
而且,对于主要用于企业网的项目来说,多余的体积显然并不是什么太大的问题。
| 如果有一个文件改动,哪怕是空格,也会所有都编译一般是吧!,那这样有些太慢了. --- 09年2月24日,周二, Bill <lwl...@gmail.com> 写道: 发件人: Bill <lwl...@gmail.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,而皮肤没有被导入,不一定能够成功进行皮肤的反射......
而且RSL用在自己的类库上,我觉得没必要。你的自定义类既然写出来了,正常情况下都会用吧,这种就没必要弄RSL了。
我现在说闲不闲说忙不忙,测试这东西......还是不怎么想- -
> > > \projects\framework\src\mx\core\UIComponent.as:8403]- 隐藏被引用文字 -
>
> - 显示引用的文字 -
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给加载好,可以留一部-分暂时不需要使用的在程序起来后再进行加载。
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的。
是这样的吧?
谢指点。
至于你说皮肤的问题,我之前没有动过它们,我想应该不是这里的错误。 其实解决这个错误不是我的目地,我只是想知道RSL是不是真的可以解决反射问
题。
您能给我一个回答吗?
谢谢!
RSL的具体实现部分我也没看