1. window
    1. creation
      1. type
        1. standard
        2. utility
        3. lightweight
      2. option
        1. size
        2. color
        3. ...
    2. show it
      1. invoke "window.activate()"
    3. adding content
      1. window.stage.addChild(textfield)
      2. stage
        1. 可以定义布局
    4. 本质上是 NativeWindow对象
  2. Application
    1. 1 application objection per AIR/flex app
    2. creation
      1. via XMXL declaration
      2. runtime已经是帮我们准备好这个object,我们不能initiate一个
    3. Subtopic 3
    4. define a window
    5. 本质上是 NativeApplication对象
    6. 或许打开的窗口 nativeApplication.openedWindows[i].close()
  3. Plan a application
    1. make re-usable component w/ a seperate MXML ,方便重用
    2. 在close main application的时候,需要close其他已经打开的window
  4. Data Model
    1. sources
      1. xml
      2. database
      3. remote resource
    2. Data Model creation
      1. 使用value object & transfer object: 整个object代表了一个data entry
        1. 可以使用default value: public var myDateProperty:Date = new Date();
        2. value object的属性可以直接binding,方便xmxl中使用
          1. package valueObjects { [Bindable] public class Contact { public var contactId:int=0; public var firstName:String; public var lastName:String;
        3. perperty的定义
          1. 直接使用public 的成员
          2. 使用private member variable 和 accessor methods
          3. private var _firstName:String;
          4. setter
          5. public function set contactId(newValue:int):void { this._contactId=newValue; }
          6. getter
          7. public function get contactId():int { return this._contactId; }
        4. 初始化value obj
          1. using MXML
          2. 1. 声明自定义的ns,同时指定对于的package+ class
          3. <mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” xmlns:valueObjects=”valueObjects.*”> </mx:Application>
          4. 2. 开始定义,利用之前引入的ns
          5. <valueObjects:ContactComplete id=”myContact”/>
          6. Subtopic 3
          7. using AS
          8. private var myContact:Contact = new Contact();
      2. <mx:Model>
        1. <mx:Model id=”myContact”> <data> <contactId>1</contactId> <firstName>Joe</firstName> <lastName>Adams</lastName> <address>123 Main Street</address> <city>Anywhere</city> <state>WA</state> <zipCode>12345</zipCode> <dob>11/28/1959</dob> <telephone>555-123-4567</telephone> </data> </mx:Model>
        2. 可以使用binding,同样注意binding的timing,如果太早的话,可能value为空
        3. 可以直接embed数据文件
          1. <mx:Model id=”bookData” source=”data/books.xml”/>
          2. bookArray = ArrayUtil.toArray(bookData.book);
        4. 如何引用
          1. myContact.firstName
    3. ArrayCollection
      1. A data collection is an ordered list of data objects stored in client application memory.
      2. 不同于Arrary,ArrayCollection可以保证可靠的binding
      3. 同时提供更丰富的功能:filtering, ordering,tranversal,
  5. Main Topic 4
  6. RIA
    1. local file system
      1. basic
        1. 同步 vs 异步
          1. 异步操作不返回任何可以直接操作的东西,而是触发了一个操作。 在这个操作中会dispatch出一些列event。我们在再根据这些event来继续
          2. cancelling,撤销你的操作,比如copy大文件
          3. 同步:直接返回操作的结果,但是快慢依赖当时上下文而定
        2. 对于耗时的操作经历使用“异步”模式来实现
        3. flash.filesysystem.file 来代表文件或者目录
          1. File.desktopDirectory.getDirectoryListing();
        4. 很多操作都分为“同步“和”异步“版本
        5. 常见的目录,有static property来表示
          1. File.desktopDirectory
          2. File.userDirectory
          3. ...
        6. resolve file system path
          1. relative referencing
          2. File.documentsDirectory.resolvePath("notes");
          3. 相对路径里只能用"/" ,因为\是有特别意义
          4. absolute referencing
          5. 可以用"/" 或者"\\"
          6. new File("C:/Documents and Settings/");
        7. 选择文件/目录
          1. file.browseForOpen("Select a file");
        8. 标准化文件路径
      2. directory
      3. file
  7. Navigation
    1. navigator container,直接换一个视图
      1. viewstack
        1. ,想象一堆扑克牌,扑在最上面的永远只有一张
        2. <mx:ViewStack>
        3. 只有container能进入到stack里面
          1. mx.core.Container是其superclass的class可以称之为container
          2. container比如:TabNavigator, Accordion ...
          3. control cannot nested in viewstack
        4. user cannot select a current view,必须由actionscript code来控制
        5. 常见操作
          1. 定义
          2. 切换
          3. 利用code: viewstack1.selectedIndex++
          4. 利用NavigationBar
          5. viewstack里面的view总数
          6. viewstack.numChildren
          7. Subtopic 4
          8. creationComplete=”executeBindings(true)” 为了解决解析binding是viewstack还没有
      2. Subtopic 2
    2. view state: 不是完全换界面,而是修改
  8. IDE & development
    1. 使用global trace()在debug version中,这里的trace()是全局函数,因此不需要import any package
    2. debugging
      1. 有时候debug的时候不能启动,是因为Adobe Debug Launcher(adl.exe)没有shutdown, 这个时候直接kill掉就ok了
    3. 开发步骤
      1. 1. 编译mxml+as成.swc文件: mxmlc +configname=air Main.mxml
      2. 2.调用adl来launche: adl Main-descriptor.xml
      3. 3. 创建installer
  9. Main Topic 12
  10. Monitoring network status
  11. Animation
    1. pre-builtin effects
      1. behaviors
        1. triggers + effect = 视觉上的行为或者动作
        2. trigger
          1. 是一种对于用户的动作或者App状态变化的反应
          2. 类似于event,但是最终的处理着不是evenHandler
          3. 当然我们可以监听event,然后play effect,到达同样的效果,只是会麻烦些
          4. commonly used Triggers, defined in "UIComponent" class
          5. addedEffect
          6. creationCompleteEffect
          7. focusInEffect
          8. ...
        3. Subtopic 3
    2. 如何配置effect
      1. myImage.setStyle(“showEffect”, new Fade());
      2. <mx:Image id=”myImage” source=”assets/flower1.jpg” x=”150” y=”100” showEffect=”Fade” hideEffect=”Fade”/>
    3. 如何play effect
      1. var myFade:Fade = new Fade() myFade.target = myImage; myFade.alphaFrom = 1; myFade.alphaTo = 0; myFade.play();
  12. ViewState
    1. 可以然view适应更多的situation
    2. 用来定义对于current view需要增加的变化
      1. 比如:login form稍加修改可以变为regeistration form
      2. 变化之前: base state, 包括所有controls,even handler... nested controls if it's container
        1. base state的名字为空
      3. 变化之后,这一系列change称之为 named state
        1. 每一个action,称之为override
    3. defining viewstate
    4. switch state
      1. this.currentState = “oneway”; 跟viewstack类似
    5. state 管理
      1. 如果在一个state action中,一个control被in-visible了,它的内存不会被释放, 除非set it to 'null'来remove它
      2. <mx:RemoveChild target=”{objectToRemove}”/>
    6. transition
      1. 在state变化之间加入effects
      2. 当然parallel 和 sequence 都支持