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