(五)Flex4_使用远程数据

ningwentao 2012-12-30

使用远程XML数据

1.数据来源:嵌入式数据、远程加载数据

2.以Object形式返回数据的HTTPService对象

3.以XML形式返回数据的HTTPService对象

使用E4X(ECMAScriptforXML)表达式搜索XML数据

基于动态XML构建XMLListCollection(将需要的数据放到集合中)

6.将获取到的数据在控件(List、ComboBox、Tree)中进行显示

-----------------------------------------------------------

嵌入式数据(适合不需要经常更新的数据,如省份)

通过source属性将外部文件作为模型的数据来源

<fx:Modelid="groceryInventory"source="assets/inventory.xml"/>

以何种方式使用XML

1.直接使用XML<fx:XML>---E4X

2.将XML转换为对象,再用对象代理XML<fx:Model>

远程数据(将数据与应用程序分离)

HTTPService

HTTPService组件可以让应用程序从给定URL取得数据

默认情况下数据以对象的形式返回,也可以设置以XML形式返回数据

使用HTTPService的步骤:

1.创建HTTPService对象(调用send方法之前请求不会开始)

2.调用对象中的send(),必须通过此方法,程序才会向服务器发起数据请求

3.使用数据(当数据成功返回之后,会触发一个Result事件,在该事件中完成数据处理)

何时向服务器发起请求?

当应用程序启动时便获取数据,通过Application的creationComplete事件处理函数,在函数中调用send

如何访问HTTPService返回的数据:

1.httpServiceID.lastResult属性可以在应用程序的任何地方使用

2.event.result属性只能在事件处理函数中使用

数据访问的安全性

FlashPlayer安全模型的核心是"沙箱"机制

FlashPlayer会把来自不同域的内容放到不同的沙箱中,从一个域加载的内容

不允许访问从另一个域中加载的内容

跨域访问数据

通过跨域策略文件来设置访问权限--crossdomain.xml

这个文件要放在包含被访问数据的Web服务器的根目录下!

内容:

<cross-domain-policy>

<allow-access-fromdomain="www.xxxsite.com"/>

</cross-domain-policy>

允许所有域的访问

<cross-domain-policy>

<allow-access-fromdomain="*"/>

</cross-domain-policy>

XML与XMLList的区别

XML是具有唯一根标签的

XMLList则只包含一组有效XML节点,自身没有根节点,不是有效的XML

E4X运算符

E4X运算的结构都是XMLList类型的数据,即一组有效的XML节点

这些节点中包含的数据就是我们需要的数据

使用E4X搜索XML文件,找到需要的节点,XML是树形结构的,通常需要获取树的一些分支

categroy.product

categroy.product[1]

categroy.product.(unit=="bag")过滤器限制返回数据

categroy.product.(@cost=="1.95")基于节点的属性进行过滤,需要使用@标记

categroy.product.(@cost=="1.95").(unit="each")

categroy..product后代存取器descendantaccessor返回所有符合条件的后代

categroy..product.(@cost>2)

注意:

XML和Object这两种返回的数据格式只是使用XML的不同方式,各有利弊,都有各自适用的场合!

1.XML结合E4X表达式可以快速搜索和操作XML数据,但是任何一个地方录入错误都将导致程序出错

2.使用强类型的对象可以通过提示避免录入错误

HTTPService默认会在取得数据时返回动态的对象而不是XML

可以修改相应属性返回XML,将返回数据保存到XMLListCollection中

在HTTPService中添加resultFormat属性

resultFormat="e4x"这样返回的数据就可以使用E4X运算符来操作XML了

[默认情况下,返回的数据是一个被包装到ObjectProxy实例中的动态代理对象]

返回的数据可以通过event.result.xxx获取到

然后放到一个XMLListCollection中

[Bindable]元标签

告诉Flex监视某个数据的变化,在发生变化事件时,通知所有使用该数据的对象更新数据并刷新显示

eg:

[Bindable]

privatevarcategries:XMLListCollection;

privatefunctionhandleCategoryResult(event:ResultEvent):void{

categories=newXMLListCollection(event.result.category);

}

说明:将需要的数据保存到一个XMLCollection中,方便对数据进行操作

---------------------------------------------------------------

在Flex的List控件中显示远程数据

将获取到的数据放大控件中进行显示

通过dataProvider来指定数据源

通过labelField告诉Flex以哪个字段(属性)作为列表项的标签

<s:ListdataProvider="{categories}"labelField="name">

<s:layout>

<s:HorizontalLayout/>

</s:layout>

</s:List>

相关推荐