(五)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>









 

你可能感兴趣的:(flex4)