Flex 3 学习总结

Flex 3 学习总结
2009-02-06 11:20

--------------------Repeater---------------

<mx:Repeater id="foodRepeater"
   width="100%" height="100%"
  dataProvider="{prodByCategory}">
   <v:GroceryDetail id="prod"
    width="80%"
    groceryItem="{foodRepeater.currentItem}"/>
</mx:Repeater>

--------------------XML搜索方法------------

    private function prodByCategoryHandler(event:ResultEvent):void{
     rawData=event.result as XML;

    for each(var c:XML in event.result..category){
      var category:Category = new Category(int(c.@catID),String(c.@catName));
      aCats.push(category);//对象category压入数组
      categorizedProducts[c.@catID] = new Array();
     for each (var p:XML in c..product){
       var prod:Product = new Product(Number(p.@catID),
       String(p.@prodName),
       Number(p.@unitID),
       Number(p.@cost),
       Number(p.@listPrice),
       String(p.@description),
       Boolean(p.@isOrganic=="Yes"),
       Boolean(p.@isLowFat=="Yes"),
       String(p.@imageName));
       categorizedProducts[c.@catID].push(prod);
      }
     }
     if(this.parentDocument.categorizedProductDataLoaded != null){
      this.parentDocument.categorizedProductDataLoaded(aCats);
     }
    }

------------------------Model----------------------

Model需要有一个根节点,如product

<mx:Model id="prodModel">
  <product>
    <catID>{int(catID.selectedItem.catID)}</catID>
    <prodName>{prodName.text}</prodName>
    <unitID>{unitID.selectedItem.unitID}</unitID>
    <cost>{Number(cost.text)}</cost>
    <listPrice>{Number(listPrice.text)}</listPrice>
    <description>{description.text}</description>
    <isOrganic>{isOrganic.selected}</isOrganic>
    <isLowFat>{isLowFat.selected}</isLowFat>
    <imageName>{imageName.text}</imageName>
  </product>
</mx:Model>

-----------------------自定义组件的弹出----------------

    private var win:ConfirmScreen;//窗口组件类

    private function doProdAdd():void{
     var prod:Product = Product.buildProduct(prodModel);
    showPopUp(prod,"product "+ prodModel.prodName +" added");
    }

    private function showPopUp(prod:Product,title:String):void{
     win =ConfirmScreen(PopUpManager.createPopUp(this,ConfirmScreen,true));
     win.prod = prod;////传递参数
     win.title = title;
    }

-----------------------自定义组件的关闭--------------

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
close="PopUpManager.removePopUp(this)"
showCloseButton="true">

<mx:Script>
   <![CDATA[
    import mx.managers.PopUpManager;

-----------------------光标的使用--------------------

import mx.collections.IViewCursor;
private var cursor:IViewCursor;
cursor = ArrayCollection.createCursor();
var found:Boolean = cursor.findFirst(classObject);
var sci:ShoppingCartItem = cursor.current as ShoppingCartItem;
cursor.remove();还有findAny(),findLast() 方法

------------------------对ArrayCollection进行Sort排序----------------

    var prodSort:Sort=new Sort();
    var sortField:SortField=new SortField("product");////////////SortField有三个参数可选,是否区分大小写(默认区分),升降序(默认降序),数字顺序还是字母顺序(默认字母顺序)
    prodSort.fields=new Array(sortField);/////还可以把这二句合成:var sortField1:SortField=new SortField("product");
    myArrayCollection.sort=prodSort;
    myArrayCollection.refresh();

------------------------转换类型---------------------

addToCart(groceryInventory.getItemAt(0) as Product)    把groceryInventory.getItemAt(0) 转为Product类

-------------------------selectIndex的设置-----------

当selectIndex=-1表示该控件没有选中任何项目

-------------------------属性的转换-------------------------

Number(p.@catID),String(p.@prodName),Boolean(p.@isOrganic=="Yes")

--------------------------定义ArrayCollection---------------

ac=new ArrayCollection(
[
{"firstname": "Christopher", "lastName": "Lapber"},
{"firstname": "Dean", "lastName": "Hownson"},
]
);

---------------------------Application初始执行函数----------

initialize="init()"

=================E4X================

E4X Expression:
1、使用e4x,不需要在语句中包含根节点
2、.   显示所有节点
<catalog>
<category name="vegetables">
    <product name="lettuce" cost="1.95">
      <unit>bag</unit>
      <desc>Cleaned and bagged</desc>
    </product>
    <product name="carrots" cost="2.95">
      <unit>pound</unit>
      <desc>Baby carrots, cleaned and peeled</desc>
    </product>
</category>
<category name="fruit">
    <product name="apples" cost="1.95">
      <unit>each</unit>
      <desc>Sweet Fuji</desc>
    </product>
    <berries>
      <product name="raspberries" cost="3.95">
        <unit>pint</unit>
        <desc>Firm and fresh</desc>
      </product>
      <product name="strawberries" cost="2.95">
        <unit>pint</unit>
        <desc>Deep red and juicy</desc>
      </product>
    </berries>
</category>
</catalog>
3、category.product 显示product标签所有节点
<product name="lettuce" cost="1.95">
<unit>bag</unit>
<desc>Cleaned and bagged</desc>
</product>
<product name="carrots" cost="2.95">
<unit>pound</unit>
<desc>Baby carrots, cleaned and peeled</desc>
</product>
<product name="apples" cost="1.95">
<unit>each</unit>
<desc>Sweet Fuji</desc>
</product>
4、category.product.unit 显示unit标签子节点
<unit>bag</unit>
<unit>pound</unit>
<unit>each</unit>
5、category.product[0] 指定第0个标签
<product name="lettuce" cost="1.95">
<unit>bag</unit>
<desc>Cleaned and bagged</desc>
</product>
6、category.product.(unit=="each") 搜索节点的值
<product name="apples" cost="1.95">
<unit>each</unit>
<desc>Sweet Fuji</desc>
</product>
7、category.product.(@name=="carrots") 搜索属性里的值
<product name="carrots" cost="2.95">
<unit>pound</unit>
<desc>Baby carrots, cleaned and peeled</desc>
</product>
8、category.product.(@name=="carrots").(unit=="pound")    多条件搜索
或者category.product.(unit=="pound").(@name=="carrots")
<product name="carrots" cost="2.95">
<unit>pound</unit>
<desc>Baby carrots, cleaned and peeled</desc>
</product>
9、category..product 探索所有product标签
<product name="lettuce" cost="1.95">
<unit>bag</unit>
<desc>Cleaned and bagged</desc>
</product>
<product name="carrots" cost="2.95">
<unit>pound</unit>
<desc>Baby carrots, cleaned and peeled</desc>
</product>
<product name="apples" cost="1.95">
<unit>each</unit>
<desc>Sweet Fuji</desc>
</product>
<product name="raspberries" cost="3.95">
<unit>pint</unit>
<desc>Firm and fresh</desc>
</product>
<product name="strawberries" cost="2.95">
<unit>pint</unit>
<desc>Deep red and juicy</desc>
</product>
10、category..product.(@cost>2)
<product name="carrots" cost="2.95">
<unit>pound</unit>
<desc>Baby carrots, cleaned and peeled</desc>
</product>
<product name="raspberries" cost="3.95">
<unit>pint</unit>
<desc>Firm and fresh</desc>
</product>
<product name="strawberries" cost="2.95">
<unit>pint</unit>
<desc>Deep red and juicy</desc>
</product>

---------------------ComboBox绑定数据并添加“请选择”-------------

    import mx.collections.ArrayCollection;
    import mx.rpc.events.ResultEvent;

    [Bindable]
    private var categories:ArrayCollection=new ArrayCollection();

    private function catHandler(event:ResultEvent):void{
     categories = event.result.catalog.category;
     var catObj:Object = new Object();
     catObj.name = "请选择";
     catObj.categoryID = 0;
     categories.addItemAt(catObj, 0);

     catCombo.selectedIndex = 0;
    }

   <mx:ComboBox id="catCombo"
   dataProvider = "{categories}"
   labelField = "name"/>

------------------dataProvider、ArrayCollection的使用-----------

<mx:ComboBox labelField="type" >
<mx:dataProvider>
   <mx:ArrayCollection>
    <mx:Object type="Fruit" value="zero"/>
    <mx:Object type="Fruit1" value="zero1"/>
   </mx:ArrayCollection>
</mx:dataProvider>
</mx:ComboBox>

-----------------跨域策略文件-----------------

Flex 遵守Flash Player的安全沙箱限制。

crossdomain.xml,位于SWF文件调用的Web服务器的根目录下,指定哪些域可以通过Flash Player访问其中的资源。下面的代码可以允许任何SWF访问跨域策略文件所在服务器上的可用资源。


<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

http://www.cnn.com/crossdomain.xml

请先确定已经了解了其将承担的所有后果后使用。

-----------------HTTPService获取数据--------

1、使用lastResult:   HTTPServiceID.lastResult.XML节点

-----------------创建HTTPService对象-------

步骤:
1、创建一个HTTPService对象。
2、调用对象中的send()方法。
3、使用返回的数据。

-----------------在类中使用trace-----------

import flash.utils.*

trace(" ");

------------------this的指向-----------------

this.object   object是指的是这个类中的变量,可以区分局部变量

-------------------如何看创建的ActionScript--------------

在创建时Flex Project时,就会从Application类中派生出一个类。
如果想看创建的ActionScript,可以在Flex Builder中添加一个参数。
Project->Properties->Flex Complier->Additional complier arguments
在现有的参数后面添加 -keep-generated-actionscript

在你的项目里将会自动创建一个名叫generated的文件夹,里面有许多ActionScript文件,实际应用程序文件命名会以Name-generated.as的方式命名。当查看完毕,别忘记删除这个编译器参数。

--------------------断点调试器的说明--------------------

Name列中,"L"图标表明它是一个局部变量。

--------------------使用来自事件对象的数据----------------

type:事件中的type是一个字符串,包含了需处理的事件的名称,比如:click或creationComplete

target:代表哪个组件分发了这个事件,比如,单击按钮产生的事件时,target就代表了这个Button事件。

----------------------Model-----------------------

You can place an <mx:Model> tag in a Flex application file, or in an MXML component file. The tag must have an id value. It cannot be the root tag of an MXML component. The <mx:Model> tag has the following syntax:

<mx:Model id="modelID">
model declaration 这里面放进XML数据
</mx:Model>

 

 

or:

<mx:Model id="modelID" source="fileName" />

--------------------creationComplete事件--------------

每一个子元素都会有一个creationComplete,执行顺序为:先子元素,后Application

所以在获取数据的时候,在Application中执行creationComplete事件才是向外部资源请求并使用数据的适当时机。

如果响应多个事件,可以加“;”,比如:creationComplete="fun1();fun2()"

---------------------绑定------------------

给属性值使用 {} 就是绑定

---------------------Form-------------

<mx:Form>
<mx:FormHeading label="{prodModel.catName}"/>标题
<mx:FormItem label="Product Name">
   <mx:TextInput id="product" text="{prodModel.prodName}"/>内容名称(可以在里面放控件)
</mx:FormItem>
</mx:Form>


--------------------CheckBox -----------------

<mx:CheckBox id="isLowFat" selected="{prodModel.isLowFat}"/>

------------------Image控件-------------------

<mx:Image source="@Embed('assets/dairy_milk.jpg')" scaleContent="true"
    mouseOver="this.currentState='expanded'"
    mouseOut="this.currentState=''"/>

@Embed把图片嵌入到SWF中,加载SWF时,已经加载图片,不需要用户等待;缺点是SWF文件会变很大

////////////////视图状态//////////////

如何切换视图状态:

   <mx:LinkButton label="基状态"
    click="this.currentState=''"/>表示其状态不再显示
   <mx:LinkButton label="子状态"
    click="this.currentState='ChildState'"/>

////////////////容器的知识//////////////////////

作用:可以分组来管理控件
Canvas:默认是把控件位于0,0位置
Tile:
Panel:有标题、和状态


////////////////回车如何写//////////////////

在as中赋值 label.text="dfasdfsf /r/n zxcsdfasd"
在mxml中赋值 text="dfasdfas &#13; dfasdfa"

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

Label 与 Text 的区别

Label里的东西不可以复制,Text里的可以。

posted @ 2011-02-14 23:14  y0umer  阅读(250)  评论(0编辑  收藏  举报