Flex学习笔记

1环境搭建

1.1安装FlexBuilder

1.2安装MyEclipse

1.3安装tomcat

1.4安装blazeds

2简单示例

2.1创建Flex项目

 

2.2MXML文件编辑

Flex的编程其实就是基于MXML文件的编程,MXML文件描述了UI的布局以及控件触发的事件。

2.3UI构造

 

 

界面增加了一个textarea,以及两个按钮。

第一个按钮表示通过按钮触发脚本事件关闭窗口。

Close 表示通过按钮触发属性的变更关闭窗口。

以上的操作都是基于事件触发的,类似于编写javascript代码。

2.4MXML格式定义

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Style>
TextArea {
font-size: 36px;
font-weight: bold;
}
</mx:Style>

<mx:Script>---定义脚本
<![CDATA[
public function close() : void {
myPanel.visible = false;
}
]]>
</mx:Script>
<mx:Fade id="myFade"/>
<mx:Panel id= "myPanel" layout="absolute" width="80%" height="80%" x="122" y="24" hideEffect="{myFade}">
<mx:TextArea text="Say hello to Flex!" top="10" bottom="102" left="10" right="42"/>
<mx:Button label="Close"  click="myPanel.visible=false" x="174" y="166"/>
<mx:Button x="10" y="166" label="close with code" click="close()"/>
</mx:Panel>
</mx:Application>

 

3事件处理

3.1属性赋值处理

<mx:Button label="Close"  click="myPanel.visible=false" x="174" y="166"/>

3.2Actionscript处理

<mx:Script>---定义脚本
<![CDATA[
public function close() : void {
myPanel.visible = false;
}
]]>
</mx:Script>

<mx:Button x="10" y="166" label="close with code" click="close()"/>
3.3	绑定数据赋值处理
<?xml version="1.0"?>
<!-- ?xml tag must start in line 1 column 1 -->
<!-- MXML root element tag. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<!-- Flex controls exist in a container. Define a Panel container. -->
<mx:Panel title="My Application">
<!-- TextInput control for user input. -->
<mx:TextInput id="myInput" width="150" text=""/>
<!-- Output TextArea control. -->
<mx:TextArea id="myText" text="{myInput.text}" width="150"/>
</mx:Panel>
</mx:Application>

 

3.4监听器模式处理

实现美元和人民币转换程序。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="createListener();">
<mx:Script>
<![CDATA[
public function createListener():void {
btnConvert.addEventListener(MouseEvent.CLICK, convertCurrency);
}
public function convertCurrency(e:Event):void {
var rate:Number = 6.2;
var price:Number = Number(txtPrice.text);
if (isNaN(price)) {
lblResults.text = "Please enter a valid price.";
} else {
price = price * rate;
lblResults.text = "Price in Yen: " + String(price);
}
}
]]>
</mx:Script>

<mx:Panel x="20" y="20" width="450" height="150" layout="absolute"
title="Currency Converter">
<mx:Label x="25" y="37" text="Price in Dollars"/>
<mx:Label x="120" y="65" id="lblResults"/>
<mx:TextInput x="120" y="35" id="txtPrice"/>
<mx:Button x="290" y="35" label="Convert to Yen" id="btnConvert"/>
</mx:Panel>
</mx:Application>

 

3.4.1界面绘制

<mx:Panel x="20" y="20" width="450" height="150" layout="absolute"
title="Currency Converter">
<mx:Label x="25" y="37" text="Price in Dollars"/>
<mx:Label x="120" y="65" id="lblResults"/>
<mx:TextInput x="120" y="35" id="txtPrice"/>
<mx:Button x="290" y="35" label="Convert to Yen" id="btnConvert"/>
</mx:Panel>

 

3.4.2实现事件

public function convertCurrency(e:Event):void {
var rate:Number = 6.2;
var price:Number = Number(txtPrice.text);
if (isNaN(price)) {
lblResults.text = "Please enter a valid price.";
} else {
price = price * rate;
lblResults.text = "Price in Yen: " + String(price);
}
}

 

3.4.3注册事件到监听器

public function createListener():void {

btnConvert.addEventListener(MouseEvent.CLICK, convertCurrency);

}

3.4.4加载事件监听器

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="createListener();">

4数据绑定

4.1程序效果图

 

该应用实现通过flex从远程服务中获取xml数据,然后将数据解析显示在datagrid组建中,以及将数据绑定显示在textarea组建中。

4.2MXML文件

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="feedRequest.send()">
	<mx:Panel x="10" y="10" width="475" height="400" layout="absolute" title="{feedRequest.lastResult.rss.channel.title}">
		<mx:DataGrid id="dgPosts" x="20" y="20" width="400" height="145" dataProvider="{feedRequest.lastResult.rss.channel.item}">
			<mx:columns>
				<mx:DataGridColumn headerText="Posts" dataField="title"/>
				<mx:DataGridColumn headerText="Date" dataField="pubDate" width="150"/>
			</mx:columns>
		</mx:DataGrid>
		<mx:TextArea x="20" y="175" width="400" height="97" htmlText="{dgPosts.selectedItem.description}"/>
		<mx:LinkButton x="20" y="280" label="Read Full Post" click="navigateToURL(new URLRequest(dgPosts.selectedItem.link));"/>
	</mx:Panel>
	<mx:HTTPService
		id="feedRequest"
		url="http://weblogs.macromedia.com/mchotin/index.xml"
		useProxy="false"/>
</mx:Application>

 

4.3引用服务

<mx:HTTPService

id="feedRequest"

url="http://weblogs.macromedia.com/mchotin/index.xml"

useProxy="false"/>

id 对应服务的唯一标示。

url 服务的地址

4.4发送请求

通过以下配置实现服务的请求。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="feedRequest.send()">

creationComplete="feedRequest.send()"

创建程序完毕后通过调用服务的send方法实现对服务的请求。

4.5返回的xml信息

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
<channel>
<title>Matt Chotin</title>
<atom:link href="http://blogs.adobe.com/mchotin/feed" rel="self" type="application/rss+xml"/>
<link>http://blogs.adobe.com/mchotin</link>
<description/>....

4.6绑定并显示数据

4.6.1显示blog标题信息

<mx:Panel x="10" y="10" width="475" height="400" layout="absolute" title="{feedRequest.lastResult.rss.channel.title}">

 

4.6.2显示blog列表信息(datagrid组建)

<mx:DataGrid id="dgPosts" x="20" y="20" width="400" height="145" dataProvider="{feedRequest.lastResult.rss.channel.item}">
<mx:columns>
<mx:DataGridColumn headerText="Posts" dataField="title"/>
<mx:DataGridColumn headerText="Date" dataField="pubDate" width="150"/>
</mx:columns>
</mx:DataGrid>

 

dataProvider : 配置rss的日志项信息,其实就是对应xml的对应内容节点。

dataField:配置xml中的具体子节点。

4.6.3显示blog详细信息(textArea组建)

<mx:TextArea x="20" y="175" width="400" height="97" htmlText="{dgPosts.selectedItem.description}"/>

 

HtmlText:已html形式显示选择项的description字段。

4.6.4显示blog里面的链接信息(LinkButton组建)

<mx:LinkButton x="20" y="280" label="Read Full Post" click="navigateToURL(new URLRequest(dgPosts.selectedItem.link));"/>

 

5常用组建

5.1ComboBox

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Panel x="10" y="10" width="350" height="200" layout="absolute"
title="Rate Customer Service">
<mx:ComboBox x="20" y="20" id="cbxRating">
<mx:dataProvider>
<mx:Array>
<mx:String>Satisfied</mx:String>
<mx:String>Neutral</mx:String>
<mx:String>Dissatisfied</mx:String>
</mx:Array>
</mx:dataProvider>
</mx:ComboBox>
<mx:Button x="140" y="20" label="Send"/>
</mx:Panel>
</mx:Application>

 

5.2绑定数据

5.2.1字符串

<mx:dataProvider>
<mx:Array>
<mx:String>Satisfied</mx:String>
<mx:String>Neutral</mx:String>
<mx:String>Dissatisfied</mx:String>
</mx:Array>
</mx:dataProvider>

 

5.2.2对象

<mx:Object label="Satisfied" data="5"/>
<mx:Object label="Neutral" data="3"/>
<mx:Object label="Dissatisfied" data="1"/>

 

便于处理将显示信息和绑定数据值进行分离。

5.3获取列表数据

<mx:Label x="20" y="120" text="{cbxRating.value}" />

 

5.4切换组建状态

 

当点击 Advanced Options 链接按钮时下面自动依次渐变的显示复选框按钮。

5.4.1MXML数据

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Panel id="panel1" x="5" y="5" width="300" height="400" layout="absolute">
<mx:Label x="20" y="70" text="Search"/>
<mx:TextInput x="20" y="90"/>
<mx:Button x="185" y="90" label="Go"/>
<mx:LinkButton x="20" y="120" label="Advanced Options" click="currentState='Advanced'" id="linkbutton1"/>
</mx:Panel>
 
<mx:states>
<mx:State name="Advanced">
<mx:AddChild relativeTo="{panel1}" position="lastChild">
<mx:VBox x="20" y="160" width="160" height="80" id="myVBox">
<mx:CheckBox label="Regular expression"/>
<mx:CheckBox label="Case sensitive"/>
<mx:CheckBox label="Exact phrase"/>
</mx:VBox>
</mx:AddChild>
<mx:SetEventHandler target="{linkbutton1}" name="click" handler="currentState=''"/>
</mx:State>
</mx:states>
 
<mx:transitions>
<mx:Transition id="myTransition" fromState="*" toState="Advanced">
<mx:Parallel target="{myVBox}">
<mx:WipeDown duration="2000"/>
<mx:Dissolve alphaFrom="0.0" alphaTo="1.0" duration="2000"/>
</mx:Parallel>
</mx:Transition>
</mx:transitions>
</mx:Application>

 

6创建自定义组件

6.1创建组建

6.1.1新建组件

 

6.1.2录入组件信息

 

6.2绘制组件

6.2.1组建界面

 

6.2.2MXML文件

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="275"
height="150" title="Member Login">
<mx:Script>
<![CDATA[
private function handleLoginEvent():void {
lblTest.text = "logging in...";
//login logic
}
]]>
</mx:Script>
<mx:Label x="10" y="12" text="Username"/>
<mx:Label x="10" y="42" text="Password"/>
<mx:TextInput x="74" y="10" id="txtUID"/>
<mx:TextInput x="74" y="40" id="txtPwd" displayAsPassword="true"/>
<mx:Button x="178" y="70" label="Login" click="handleLoginEvent()"/>
<mx:Label x="74" y="72" id="lblTest"/>
</mx:Panel>
</mx:Canvas>

 

6.3引用组建

6.3.1新建测试应用

 

6.3.2引用登陆组件

通过组建视图将自定义的组建拖入测试组界面。

 

6.3.3MXML

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" xmlns:ns1="myComponents.*" xmlns:ns2="*">
<mx:Panel x="20" y="20" width="375" height="300" layout="absolute"
title="Main Application Window">
</mx:Panel>
<ns2:LoginBox x="403" y="20">
</ns2:LoginBox>
</mx:Application>

 

6.4测试效果图

 

7WebService调用

通过webservice获取博客信息并进行显示。

7.1界面定义

 

7.2MXML定义

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="wsBlogAggr.getMostPopularPosts.send()">
<mx:Panel x="10" y="10" width="475" height="400" layout="absolute"
title="Most Popular Posts">
<mx:ComboBox x="30" y="25" id="cbxNumPosts"
change="wsBlogAggr.getMostPopularPosts.send()">
<mx:Object label="Top 5" data="5" />
<mx:Object label="Top 10" data="10" />
<mx:Object label="Top 15" data="15" />
</mx:ComboBox>
<mx:DataGrid x="30" y="75" id="dgTopPosts" width="400"
dataProvider="{wsBlogAggr.getMostPopularPosts.lastResult}">
<mx:columns>
<mx:DataGridColumn headerText="Top Posts" dataField="postTitle"/>
<mx:DataGridColumn headerText="Clicks" dataField="clicks" width="75"/>
</mx:columns>
</mx:DataGrid>
<mx:LinkButton x="30" y="250" label="Select an item and click here for full post"
click="navigateToURL(new URLRequest(dgTopPosts.selectedItem.postLink));" />
</mx:Panel>
<mx:WebService id="wsBlogAggr"
wsdl="http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdl"
useProxy="false">
<mx:operation name="getMostPopularPosts">
<mx:request>
<daysBack>30</daysBack>
<limit>{cbxNumPosts.value}</limit>
<categoryId>1</categoryId>
</mx:request>
</mx:operation>
</mx:WebService>
</mx:Application>
7.3webservice定义
<mx:WebService id="wsBlogAggr"
wsdl="http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdl"
useProxy="false">
<mx:operation name="getMostPopularPosts">
<mx:request>
<daysBack>30</daysBack>
<limit>{cbxNumPosts.value}</limit>
<categoryId>1</categoryId>
</mx:request>
</mx:operation>
</mx:WebService>

 

7.3.1参数说明

Operation: 对应webservice的方法名

Request:包含了调用方法的参数列表

<daysBack>30</daysBack>

<limit>{cbxNumPosts.value}</limit>

<categoryId>1</categoryId>

以上信息对应webservice方法的入参名称。

7.3.2WSDL文件说明

http://feeds.adobe.com/webservices/mxna2.cfc?wsdl

<wsdl:message name="getMostPopularPostsRequest">

<wsdl:part name="daysBack" type="xsd:double"/>

<wsdl:part name="limit" type="xsd:double"/>

<wsdl:part name="categoryId" type="xsd:anyType"/>

</wsdl:message>

 

如上可以看出Flex 的Request 包含的内容与 wsdl的 wsld:part包含的内容匹配。

 

7.4执行结果

 

8问题

8.1Flex只支持IE

 

你可能感兴趣的:(Flex)