ArcGIS for Java_Flex入门学习_数据绑定功能
Flex入门学习:数据绑定功能
1.绑定组件ComboBox和Label。
<mx:ComboBox id="cb1" fontSize="12">
<mx:Object label="第一项" data="1"/>
<mx:Object label="第二项" data="2"/>
<mx:Object label="第三项" data="3"/>
<mx:Object label="第四项" data="4"/>
</mx:ComboBox>
<mx:Label text="{cb1.selectedItem.label}" y="50" fontSize="12"/>
解析:花括号是数据绑定,cb1.selectedItem.label代表这个ComboBox当前所选中的项目的标签。
属性值只有在需要数据绑定的时候要加花括号。
2.把外部xml文件中的数据绑定到组件里。
1)new一个data.xml文件,输入内容如下保存。
<?xml version="1.0" encoding="utf-8"?>
<root>
<rec label="第一项目" data="1"/>
<rec label="第二项目" data="2"/>
<rec label="第三项目" data="3"/>
<rec label="第四项目" data="4"/>
<rec label="第五项目" data="5"/>
<rec label="第六项目" data="6"/>
<rec label="第七项目" data="7"/>
<rec label="第八项目" data="8"/>
</root>
2).mxml中代码
<mx:Application creationComplete="init()"
xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script>
<![CDATA[
//所有swf中的public代码都能被别人直接调用
private function init():void{
https1.send();
}
private function chuli():void{
//cb1的数据源由https1.lastResult.root.rec提供。
cb1.dataProvider=https1.lastResult.root.rec;
}
]]>
</mx:Script>
<mx:HTTPService id="https1" result="chuli()" url="data.xml" useProxy="false" />
<mx:ComboBox id="cb1" fontSize="12" />
<mx:Label text="{cb1.selectedItem.label}" y="50" fontSize="12"/>
</mx:Application>
代码解析:
流程:当Application创建完毕后,执行init()方法,在init()方法中执行https1.send();发送http请求,flex程序创建好就立即发送http请求给data.xml,并把data.xml返回给flex程序,发生result结果事件,事件执行chuli()方法,处理得到数据。
<mx:Script>
<![CDATA[
代码只能写在这里
]]>
</mx:Script>
<mx:Script>是真正写ActionScript代码的地方。
Flex主要分3大途径获取数据:
1.RPC Service
1)HTTPService
2)WebService
3)RemoteObjectService(需要Flex Data Service)
2.Data Management Servie(需要Flex Data Service)
3.Messaging Service(需要Flex Data Service)
Flex只能在发生某些事件的时候才能执行AS3代码,没有发生事件的时候是不可能执行代码的。
所以,要让HTTPService获取外部xml数据源,并处理数据,必须在一个事件下进行。Flex有n多事件,例如最常用的creationComplete事件:每当一个组件自我创建完毕以后,就发出creationComplete事件。基本每个可视组件都有creationComplete事件,Application顶级容器也是可视的,也有creationComplete事件。
AS3基本都运行在客户端,服务器端对机器要求高。只有装有Flex Data Service的时候,AS3才有机会在服务器上运行,否则,永远运行在客户端。
creationComplete="init()" 当Application顶级容器创建完毕后,执行init()方法。
useProxy="false"表示不用代理;url里永远是数据源的地址,也可是wsdl,php等任何可以返回xml的地址。
AS3代码可以放在一个文件里,但是不能动态导入。
例如:将init()和chuli()两个函数存放在一个myAS.as文件中,.mxml中ActionScript写成
<mx.Script source="myAS.as"/>
虽然as和mxml分离了,但每次保存的时候,as还是被内置到了mxml里,如果不用Flex Data Service,不可能动态导入外部AS代码。