读书人

Cairngorm菜鸟入门教程 第三节--从使

发布时间: 2012-10-28 09:54:44 作者: rapoo

Cairngorm初学者入门教程 第三节--从使用Model Locator开始学起Cairngorm

?

?

?

?

package org.rianotes.CairngormSample.model{ import com.adobe.cairngorm.model.IModelLocator; import mx.collections.ArrayCollection; [Bindable] public class ViewModelLocator implements IModelLocator { // Single Instance of Our ModelLocator private static var instance:ViewModelLocator; public function ViewModelLocator(enforcer:SingletonEnforcer) { if (enforcer == null) { throw new Error( "You Can Only Have One ViewModelLocator" ); } } // 回传已存的参数 // Returns the Single Instance public static function getInstance() : ViewModelLocator { if (instance == null) { instance = new ViewModelLocator( new SingletonEnforcer ); } return instance; } //在下面定义你要的参数 - DEFINE YOUR VARIABLES HERE public var contactbook:ArrayCollection = new ArrayCollection(); }} // Utility Class to Deny Access to Constructorclass SingletonEnforcer {}

?其中构造函数与getInstance()这两个部分照着写,大致上不用修改。

?

它们是用来判断application中是否已经建立了ViewModelLocator,有的话读取,有的话初始一个。

在同一个application中只能有一个ModelLocator,所有的View都能从此读取数据。

而[Bindable]的特性,可以让任一个使用ModelLocator中的变量的地方自动更新。

?

下面的示例是一个通讯录,将使用者资料存在ModelLocator中
其中将示范,即使在不同的组件中对ModelLocator数据修改,其他的组件也会即时更新。

?

Cairngorm菜鸟入门教程 第三节--从使用Model Locator开始学起Cairngorm

?

新增三个文件,两个是MXML 组件。

AddPersonForm.mxml - 用来输入用户名与用户Email地址的From

?

<?xml version="1.0" encoding="utf-8"?><mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"  horizontalAlign="right"> <mx:Script>  <![CDATA[   import org.rianotes.CairngormSample.vo.User;   import mx.controls.Alert;   import org.rianotes.CairngormSample.model.ViewModelLocator;         private var modelOne:ViewModelLocator = ViewModelLocator.getInstance();    private function addPerson(e:MouseEvent):void{    if(tiUserID.text && tiEmail.text){     var usercontact:User = new User();     usercontact.UserID = tiUserID.text;     usercontact.Email = tiEmail.text;     modelOne.contactbook.addItem(usercontact);      tiUserID.text = "";     tiEmail.text = "";    }    else{     mx.controls.Alert.show("使用者ID子件不可空!");    }   }     ]]> </mx:Script>  <mx:Form borderStyle="solid" width="100%" height="100%">  <mx:FormItem label="UserID :" width="100%">   <mx:TextInput id="tiUserID" width="100%"/>  </mx:FormItem>   <mx:FormItem label="Email: " width="100%">   <mx:TextInput id="tiEmail" width="100%"/>  </mx:FormItem>  </mx:Form>  <mx:Button label="输入" click="addPerson(event)" /></mx:VBox>

?ContactbookGrid.mxml -用来显示输入资料的DataGrid

?

<?xml version="1.0" encoding="utf-8"?><mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"dataProvider="{modelOne.contactbook}"><mx:Script>   <![CDATA[    import org.rianotes.CairngormSample.model.ViewModelLocator;    private var modelOne:ViewModelLocator = ViewModelLocator.getInstance();   ]]></mx:Script><mx:columns>   <mx:DataGridColumn headerText=" - UserID - " width="75" dataField="UserID" />   <mx:DataGridColumn headerText=" - Email - " dataField="Email"/></mx:columns></mx:DataGrid>

?一个VO(value object)

?

?User.as - 用来记录User contact info的资料的类。

?

package org.rianotes.CairngormSample.vo{ public class User {        public var UserID:String;        public var Email:String;         public function User()        {        }  }}
?而其中最重要的是:

?

<mx:Application  xmlns:mx="http://www.adobe.com/2006/mxml"  layout="absolute" xmlns:components="org.rianotes.CairngormSample.view.components.*">  <mx:Script>        <![CDATA[         import org.rianotes.CairngormSample.model.ViewModelLocator;          private var modelOne:ViewModelLocator = ViewModelLocator.getInstance();         ]]> </mx:Script> <mx:HBox width="500" height="200">        <mx:VBox>           <mx:Label text="{'Number of Contacts: ' + modelOne.contactbook.length}" />         <components:ContactbookGrid width="100%" height="100%" />        </mx:VBox>        <components:AddPersonForm width="100%" height="100%" /> </mx:HBox> </mx:Application>
?

?

读书人网 >网络基础

热点推荐