嗯,当然不是字面意思,但是:
我是Flex的新手,我正在试图找出在我的应用程序启动时将我想要运行的代码放在哪里.在我的示例中,我在标记中定义了树控件,并且我有AS代码,可以从本地文件或Web服务填充它.如何将一个绑定到另一个,以便在创建控件时运行代码?
我在文档中找到的示例都使用事件处理程序,即它们在控件的开始标记中放入'creationComplete ="myInitFunction(evt)"'.这意味着我会写一个初始化东西的小胶水功能.
现在,正如我所理解的那样,Markup在内部真正转换为AS类.那么我不能只定义一个由引擎实例化的类并将我的启动代码放在构造函数中吗?也许甚至可以扩展Tree类?
编辑:
几个月后,我更加明智.在尝试滥用扩展组件类的构造函数之后,我不得不了解Flex并不期望构造函数做很多事情 - 当然不会从网络上加载数据.
"Programming Flex 3"中的组件生命周期解释非常有用.现在,我的构造函数都是空的,我正在覆盖生命周期方法,例如createChildren
很多东西,并且将事件用于任何涉及延迟或依赖于外部因素的事件,尤其是网络内容.
例如,我creationComplete
用来启动一个异步网络请求(使用HTTPService
),当返回有ResultEvent和FaultEvent处理程序时,ResultEvent更新我控件的数据绑定数据模型.这看似非常灵活,效果很好.
完成Application组件创建后,将调度creationComplete事件(在Application对象上).一旦整个应用程序完成(布局等),就会调度applicationComplete事件,并且用户可以看到它(加载屏幕已完成).
对于你提到的情况 - 你在启动时填充一个控件 - 我建议使用包含你想要填充的控件的组件的creationComplete事件(在你的情况下是树),这听起来像是'是您的应用程序组件.这通常是一种很好的做法,因为这段代码通常取决于您正在填充的组件的兄弟组件(例如,HTTPService组件).
你是对的,所有MXML都在AS3中转换,然后编译.有一个编译器标志将保留生成的AS3(尽管它是只读的).你不想搞砸.并且由于UIComponent实例化序列(构造函数,样式,布局等)的(某种程度上)复杂性,绝对是在creationComplete事件(或类似)中填充控件的最佳实践.