(五)Flex4_使用远程数据

使用远程XML数据
1.数据来源:嵌入式数据、远程加载数据
2.以Object形式返回数据的HTTPService对象
3.以XML形式返回数据的HTTPService对象
使用E4X(ECMAScript for XML)表达式搜索XML数据
基于动态XML构建XMLListCollection(将需要的数据放到集合中)
6.将获取到的数据在控件(List、ComboBox、Tree)中进行显示
-----------------------------------------------------------
嵌入式数据(适合不需要经常更新的数据,如省份)
通过source属性将外部文件作为模型的数据来源
<fx:Model id="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属性 只能在事件处理函数中使用
数据访问的安全性
Flash Player安全模型的核心是"沙箱"机制
Flash Player会把来自不同域的内容放到不同的沙箱中,从一个域加载的内容
不允许访问从另一个域中加载的内容
跨域访问数据
通过跨域策略文件来设置访问权限--crossdomain.xml
这个文件要放在包含被访问数据的Web服务器的根目录下!
内容:
<cross-domain-policy>
<allow-access-from domain="www.xxxsite.com"/>
</cross-domain-policy>
允许所有域的访问
<cross-domain-policy>
<allow-access-from domain="*"/>
</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 后代存取器 descendant accessor 返回所有符合条件的后代
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]
private var categries:XMLListCollection;

private function handleCategoryResult(event:ResultEvent):void {
categories = new XMLListCollection(event.result.category);
}

说明:将需要的数据保存到一个XMLCollection中,方便对数据进行操作
---------------------------------------------------------------
在Flex的List控件中显示远程数据
将获取到的数据放大控件中进行显示
通过dataProvider来指定数据源
通过labelField告诉Flex以哪个字段(属性)作为列表项的标签
<s:List dataProvider="{categories}" labelField="name">
<s:layout>
<s:HorizontalLayout/>
</s:layout>
</s:List>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值