论坛首页 编程语言技术论坛

FlexBuilder的组件预览机制研究心得

浏览 1486 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-20   最后修改:2009-05-20
大家都知道开发Flex的组件的一种方式是让组件类继承于UIComponent,但UIComponent的功能太强,什么功能都加到这个UIComponent上了,让开发者一点选择余地都没有(特别是对于一些互联网应用来说,很多功能不一定用得上),导致整个应用体积较大(体积较大主要是相对于直接使用Flash而言)。虽然我知道Flex适合于企业应用,但用Flash来开发一些与后台服务有交互的互联网应用时总是不大方便。

用一些开源的AS3组件倒可以做到体积小,但却无法在Flex中可视化开发。如果可以按照自己的需要来实现一些可视化的组件,那应该会比较好。

然后研究了UIComponent,UIMovieClip,耗费了N多精力,考验了N次人品,终于有所发现(具体过程不说了,比较痛苦)。原以为只要组件实现了IUIComponent就可以预览了,结果不是,里面碰到很多奇怪的问题。

主要实现思路如下:
1、首先要为开发的组件单独建一个Flex Library Project,否则在Flex Project中无法预览;

2、自定义mx.core.UIComponent或mx.flash.UIMovieClip类,让这两个自定义类实现IDeferredInstantiationUIComponent接口,这样做是为了让生成的swf能够使用在mxml中定义的自定义组件,作为实验我只实现了IDeferredInstantiationUIComponent接口(当然也可以使用官方的UIMovieClip实现,不过这个类没有源码,可以反编译使用了UIMovieClip的swf得到);

3、然后让自定义组件继承于刚才实现的UIComponent或UIMovieClip(如果把这两个类改成其他名字,好像也预览不了,真是让人郁闷,难道FlexBuilder还不是面向接口编程);

实现主要包括以下文件,详情见附件:
mx.flash.UIMovieClip,没有使用官方实现的UIMovieClip,自己实现便于搞懂运行机制
org.eleven97.fcl.core.FlexibleComponent,主要是避免直接使用UIComponent或UIMovieClip
org.eleven97.fcl.controls.Rect:自定义组件Rect

到此一个在FlexBuilder可以显示的Rect已经开发完成。但可惜遇到太多离奇的问题,无法继续深入下去。
比如在FlexibleComponent中如果直接使用了_initialized,Rect就无法显示了;或者有时候覆盖了一些protected方法(不影响显示的方式)也无法显示了。

希望Flexer们能对可视化的Flex组件感兴趣,并且一起来探讨这些问题。

文笔不好,希望大家谅解。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics