flex框架cairngorm 入门源码教程

【菜鸟】cairngorm 快速入门教程

本帖最后由 kakashishi 于 2009-4-14 22:58 编辑

这一篇文章,我想通过一个我自已做的简单的例子来讲述如何运用Cairngorm来开发我们的Flex应用程序。这个例子的名称叫AddBook,即增加图书的意思,即利用我们的Flex Cairngorm来实现一个增加图书的功能。其界面效果如下所示:
  其文件结构如下所示:
  下面就跟着我来一步一步做完这个例子吧,相信只要跟我把这个例子做完,你就对Flex Cairngorm的运行机理有了较好的了解了,不过这个例子增加的图书记录并没有存到数据库中,关于存储到数据库中知识我将在下一篇文章中介绍:

  第1步:定义VO,不妨假定一本书包含书名,作者,和单价。代码如下,文件名为BookVO.as

注释:这个对象的就是用来存放数据的
  1. package com.adobe.cairngorm.book.vo
  2. {
  3.     public class BookVO
  4.     {
  5.         public var bookName : String ;
  6.         public var bookAuthor : String ;
  7.         public var bookPrice : String ;
  8.     }
  9. }
复制代码
第2步:有了VO,想想我们的视图中需要绑定那些数据库吧?无疑我们要显示我们增加的书,所以不妨给视图绑定一个数组变量来表示我们增加的书吧。给视图绑定数据我们需要在ModelLocator中实现,其文件名为:AddBookModelLocator.as,代码如下:

注释:单例模式 private static var addBookModelLocator : AddBookModelLocator ;这个静态很重要,因为他是 该类及其所产生对象 都共用的,所以轻松弄出个不管是 此类和是他的对象只要调用
Actionscript代码
  1. package com.adobe.cairngorm.book.model
  2. {
  3.     import com.adobe.cairngorm.model.ModelLocator;
  4.     import com.adobe.cairngorm.book.vo.BookVO ;
  5.     import mx.collections.ArrayCollection;
  6.     public class AddBookModelLocator implements ModelLocator
  7.     {
  8.         private static var addBookModelLocator : AddBookModelLocator ;
  9.         [Bindable]
  10.         public var BookAC : ArrayCollection = new ArrayCollection ;
  11.         public static function getInstance() : AddBookModelLocator
  12.         {
  13.             if ( addBookModelLocator == null )
  14.             {
  15.                 addBookModelLocator = new AddBookModelLocator() ;
  16.             }
  17.             return addBookModelLocator ;
  18.         }
  19.       
  20.     }
  21. }
复制代码
第3步:现在我们就要开始设计我们的视图了,即我们的界面效果,它是一个Component。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="562"
  3.     height="306" horizontalAlign="left" title="添加图书">
  4.     <mx:Script>
  5.         <![CDATA[
  6.             import com.adobe.cairngorm.book.event.AddBookEvent;
  7.             import com.adobe.cairngorm.control.CairngormEventDispatcher ;
  8.             import com.adobe.cairngorm.book.vo.BookVO;
  9.             import mx.collections.ArrayCollection;
  10.             [Bindable]
  11.             public var bookAC:ArrayCollection = new ArrayCollection() ;
  12.             public function addBook():void
  13.             {
  14.                 var bookVO : BookVO = new BookVO() ;
  15.                 bookVO.bookName = this.bookName.text ;
  16.                 bookVO.bookAuthor = this.bookAuthor.text ;
  17.                 bookVO.bookPrice = this.bookPrice.text ;
  18.                 var event : AddBookEvent = new AddBookEvent ( bookVO ) ;
  19.                 CairngormEventDispatcher.getInstance().dispatchEvent( event ) ; //view的任务完成
  20.                 this.bookName.text = "" ;
  21.                 this.bookAuthor.text = "" ;
  22.                 this.bookPrice.text = "" ;               
  23.             }
  24.         ]]>
  25.     </mx:Script>
  26.     <mx:HBox width="100%" height="258">
  27.         <mx:VBox width="250">
  28.             <mx:Form width="200" height="212">
  29.                 <mx:FormItem label="书名:">
  30.                     <mx:TextInput width="118" id="bookName"/>
  31.                 </mx:FormItem>
  32.                 <mx:FormItem label="作者:">
  33.                     <mx:TextInput width="118" id="bookAuthor"/>
  34.                 </mx:FormItem>
  35.                 <mx:FormItem label="单价:">
  36.                     <mx:TextInput width="119" id="bookPrice"/>
  37.                 </mx:FormItem>               
  38.                     <mx:Button label="添加" click="this.addBook()"/>               
  39.             </mx:Form>
  40.         </mx:VBox>
  41.         <mx:VBox>
  42.             <mx:DataGrid width="263" height="208" dataProvider="{bookAC}">
  43.                 <mx:columns>
  44.                     <mx:DataGridColumn headerText="书名" dataField="bookName"/>
  45.                     <mx:DataGridColumn headerText="作者" dataField="bookAuthor"/>
  46.                     <mx:DataGridColumn headerText="单价" dataField="bookPrice"/>
  47.                 </mx:columns>
  48.             </mx:DataGrid>
  49.         </mx:VBox>      
  50.     </mx:HBox>   
  51. </mx:Panel>
复制代码
第4步:继承我们的CairngormEvent,创建我们的自定义事件,这里我们不妨给它取名为AddBookEvent,即增加图书事件,该事件的触发行为是“添加”按键的单击,值得一提的是,该事件需要传递数据,所以我们给它一个bookVO的变量。其文件名为:AddBookEvent.as,其代码如下:
  1. package com.adobe.cairngorm.book.event
  2. {
  3.     import com.adobe.cairngorm.book.vo.BookVO;
  4.     import com.adobe.cairngorm.control.CairngormEvent;
  5.     import com.adobe.cairngorm.book.control.AddBookControl;
  6.     public class AddBookEvent extends CairngormEvent
  7.     {
  8.         public var bookVO:BookVO;
  9.         public static const EVENT_ADD_BOOK:String = 'addBook';
  10.         public function AddBookEvent(bookVO:BookVO)
  11.         {
  12.             super(AddBookEvent.EVENT_ADD_BOOK);
  13.             this.bookVO = bookVO;
  14.         }
  15.     }
  16. }
复制代码
第5步:在视图中添加触发事件的代码,当“添加”按钮单击时,我们触发一个函数,在该函数中最重要的两句为:
Actionscript代码

   1. var event : AddBookEvent = new AddBookEvent ( bookVO ) ;  
   2. CairngormEventDispatcher.getInstance().dispatchEvent( event ) ;  

    这两句表示新建了一个AddBookEvent,并且向外发送了这个事件,这个事件发送之后,我们的前台控制器便可以接收到。

  第6步:前端控制器接收并映射到某一个Command处理,其文件名为AddBookControl.as,其代码如下:
  1. package com.adobe.cairngorm.book.control
  2. {
  3.     import com.adobe.cairngorm.control.FrontController;
  4.     import com.adobe.cairngorm.book.command.AddBookCommand;
  5.     import com.adobe.cairngorm.book.event.AddBookEvent;
  6.     public class AddBookControl extends FrontController
  7.     {
  8.         public static const EVENT_ADD_BOOK : String = 'addBook';
  9.         public function AddBookControl()
  10.         {
  11.            addCommand(AddBookEvent.EVENT_ADD_BOOK,AddBookCommand); //将事件和command类映射起来
  12.         }
  13.     }
  14. }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值