22.6.创建基于ActionScript的模块

22.6.1.问题
我想创建基于ActionScript的模块
22.6.2.解决办法
创建一个继承自mx.modules.Module或mx.modules.Modulebase的ActionScript类,使用mxmlc编译模块。
22.6.3.讨论
通过继承Module和ModuleBase类创建基于ActionScript的模块。根据模块在应用程序中所扮演的角色,继承Module或ModuleBase依据你是否需要显示列表。Module类是一个显示容器,继承自FlexSprite,引入了一些框架代码,ModuleBase类继承自EventDispatcher,可被用来分离应用程序逻辑代码使之不依赖于可视化元素。

基于MXML的模块是继承自mx.modules.Module,使用<mx:Module>作为根标签。如果你创建的模块包含可视化元素,你需要继承Module类,重写一些需要的protected方法,比如继承自UIComponent的createChildren方法。

下面的例子演示一个带有可供用户输入信息的输入框组件模块:
+展开
-ActionScript
package {
import mx.containers.Form;
import mx.containers.FormItem;
import mx.controls.TextInput;
import mx.modules.Module;
public class ASContactList extends Module {
private var _form:Form;
private var _firstNameItem:FormItem;
private var _lastNameItem:FormItem;
public function ASContactList() {
super();
this.percentWidth = 100;
this.percentHeight = 100;
}
override protected function createChildren():void {
super.createChildren();
_form = new Form();
_firstNameItem = createInputItem( "First Name:" );
_lastNameItem = createInputItem( "Last Name:" );
_form.addChild( _firstNameItem );
_form.addChild( _lastNameItem );
addChild( _form );
}
private function createInputItem( label:String ):FormItem {
var item:FormItem = new FormItem();
item.label = label;
item.addChild( new TextInput() );
return item;
}
}
}

编译方式和基于MXML的模块一样,同样是使用mxmlc工具:
> mxmlc ASContactList.as
这个命令生成一个名为ASContactList的SWF文件。Module类继承自mx.core.Container,因此所有子节点组件都会被作为mx.core.IUIComponent类型被加入到显示列表。你可以添加Flex框架的组件到ActionScript模块的显示列表中。如果是添加ActionScript API中的组件,比如flash.text.TextField和mx.media.Video,需要经过包装,成为UIComponent类实例。

Module类包含框架代码是为了与用户界面对象交互。如果你的模块没有一点框架代码,你可以继承ModuleBase。mx.modules.ModuleBase类继承自EventDispatcher提供一个方便的方法分离应用程序中的逻辑代码。

下面的例子模块是继承自ModuleBase类:
+展开
-ActionScript
package {
import mx.modules.ModuleBase;
public class EntryStateModule extends ModuleBase {
public function EntryStateModule() {}
public function greet( first:String, last:String ):String {
return "Hello, " + first + " " + last + "." ;
}
public function welcomBack(first:String,last:String ):String {
return "Nice to see you again, " + first + "." ;
}
}
}

当被应用程序载入时,这个简单的模块提供一个简单的方式,用greet和welcomeBack方法提供打招呼用语。这个模块没有包含任何框架代码,因此编译后文件大小比使用Module类的模块小的多。

继承自ModuleBase的模块类的编译方式一样:
> mxmlc EntryStateModule.as
这个命令生成名为EntryStateModule的SWF。要访问模块中的公开方法,父应用程序或模块需引用ModuleLoader实例的child属性或IModuleInfo实现类的factory属性,具体请看第22.8节.。

加支付宝好友偷能量挖...


评论(0)网络
阅读(124)喜欢(0)flash/flex/fcs/AIR