版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。Flex问题解决大全1、flex包含一个基于组件的开发模型,你只需要按需求继承现有的组件并扩展相关的方法就可开发你的应用。2、可视化组件包括以下主要特性:尺寸、事件、样式、效果、皮肤。3、flex定义了两套组件。一套为Spark,放在spark.*包下。一套为MX,放在mx.*包下。Spark是在flex4中新添加的,mx为旧版本中定义的。两套组件的主要不同点在于样式及皮肤的使用。另外对于容器组件,布局的方式也改变了。4、有些组件在两套UI中都存在,例如按钮,在这种情况下adobe建议你使用Spark中
2、的组件。有些组件是某套UI特有的。例如Spark中的3d效果。mx组件中的数据可视化组件,例如DataGrid、AdvancedDataGrid。所以你的应用会包含两套UI中的组件。5、可视化组件的继承层次结构:Object-EventDispatcher-DisplayObject-InteractiveObject-DisplayObjectContainer-Sprite-FlexSprite-UIComponent。flex中所有的可视化对像都继承自UIComponent。6、UIComponent中需要注意以下属性。doubleClickEnabled:flex默认是不支持双击的,如
3、果要开启双击,请把该属性设为true;height:在mxml中你可以设置值为数字,这时默认单位为pix。你也可以设置为70%这种比例。在as中,如果要设置百分比,你需要用percentHeight这个属性。x,y:这组属性只在layout为绝对布局时才有效。7、每一个flex组件都有对应的mxml接口和as接口。两者之间是相等的。8、每个一可视化组件都包含以下三个生命周期事件:preInitialize:组件刚被创建,还没有添加子节点,且不可见。initialize:把子节点初始化好,并尺寸也设置好,但仍然处于不可见状态。creationComplete:组件已经被放在父容器中而且可见。你可
4、以使用上面三个事件对组件做一些初始化工作。9、flex提供了多种设置组件大小和布局的机制。默认大小:如果你不指定组件的大小或布局,flex会自动设置一个适合的值。显式设置大小:你可以显式地设置组件的height/width大小。基于比例的设置大小:例如在mxml中设置height/width=70%或在as中设置percentHeight/percentWidth=70。基于约束的布局:你可通过组件中的样式属性:top,buttom等设置组件的布局及大小。这种设置方式只可以使用在父组件为绝对布局的情况。10、flex应用是基于事件驱动的。事件可以让程序员知道用户与UI的交互、组件的生命周期及外
5、观变化。当一个组件分发事件,所以对该组件进行监听的监听器都会被通知。11、除了用选择器设置组件的外观外,还可以直接调用元素的setStyle(proName,value)设置外观。12、flex4中的类选择器需要使用命名空间。例子代码:namespaceslibrary:/flex/spark;s|BorderContainerborderColor:red;。13、效果(effect)是组件在一段时间内的视觉或听觉上的变化,例如退色,位移等。14、数据绑定是源属性(source)发生变化时,目的(destination)属性会自动产生变化。15、flex提供了三种数据绑定的方式。第一种是在m
6、xml中使用括号在目的属性中对源属性进行绑定。第二种是在mxml中使用标签对源属性与目标属性进行绑定。第三种是在as中使用BindingUtils方法对源属性与目标属性进行绑定。16、数据绑定符可以直接对属性进行引用,也可以对方法进行引用。例如:obj.text.toUperCase()17、数据绑定符和两种方式对数据进行绑定是从编译时就开始的。而BindingUtils即在运行时才开始绑定。18、可绑定符的意思是当对应的属性变化时,会触发数据绑定事件,通知绑定的目标属性。19、当源对像分发initialize事件以及在源对像变化时都会触发数据绑定事件。20、如果你创建一个对像,并想让它可以成
7、为数据绑定的源,那属性前面必需加上Bindable/Bindable(eventname)/Bindable(event=eventname)标签。当你直接使用Bindable标签时,实质上等价于Bindable(propertyChange)。当属性发生改变时,flex会分发propertyChange事件给绑定于此属性的绑定目标对像。21、通过标签或BindingUtils可以把多个源属性绑定到一个目标对象。绑定后,任意一个源发生改变时,目标对像都会被更新。22、双向绑定:数据的任意一方发生变化时,另一方都会被通知并改变。数据绑定表达式:。数据绑定标签:。另外样式、效果、RPC中的requ
8、est和arguments对像都不支持双向绑定。23、使用方法作为数据绑定的源。当方法的参数为Bindable时,参数的改变会触发数据绑定事件,让目标属性的值更新为方法的结果。如果方法中没有Bindable参数,即目标属性只会在开始时被更新一次。24、如果你想绑定一个方法作为源数据,但该方法又没有可绑定的参数时可以使用Bindable(event=evenname)标签,当该对像分发dispatchEvent(newEvent(eventname)时,绑定到方法的目标属性就会被更新。25、在类定义的地方便用Bindable标签等价于在该类中的所有public属性以及有对应的set/get方法的
9、属性中加上Bindable标签。27、在定义一个属性的地方使用Bindable标签的作用是当该属性被替换成另一个值时,目标属性会接收到通知事件,并更新值。这里要注意的是只有被替换时才更新,如果只是该属性中的某个属性被改变的情况,目标对像是不会被更新的。28、在数组(ArrayCollection)中使用Bindable标签时,无论是数组被替换还是数组中的元素改动,都会触发更新事件。29、如果只绑定数组中的某个元素时,应使用getItemAt()。这样该元素被替换时会触发更新事件去更新目标对像。但如果使用num的形式进行绑定时,不会触发更新事件。30、在数据绑定符()和数据绑定标签()中,你可以
10、使用as表达式。例如Number(obj.text)*6/7和ex4表达式。但不能在BindingUtils.bingProperty()/bindSetter()中使用。31、as中的方法绑定接口。BindingUtils.bindSetter(funToCall,sourceObj,sourceOperty):ChangeWatcher。32、你可以使用ChangeWatcher.watch(sourceobj,perty,listener);方法添加一个监听器,当绑定时件触发时,listener会被调用。33、如果源属性被替换,但被替换的对像与原对像是同一个对像,这种情况下更新不会被触发
11、。如果你想自已控制事件触发,你可以在Bindable(eventname)中指定事件名,然后在想更新时通过dispatchEvent(newEvent(eventname)的方式触发。34、数据绑定源中的整个属性链(chain)中的每一个节点都需要Bindable,如果只有最未端属性是Bindable,那链中的其它层属性被更改时,不会触发更新事件。35、如果你把对像绑定到dataProvider的话,当你需要改变其中一个对像的一个属性时,你需要以下代码obj.dataprovider.editField(index,propername,value);这样更新对像才会同时更新到显示组件中。36
12、、如果你把Array绑定到显示组件中时,该组件只在初始化时更新一次值。初始化后,当Array中的项改变时,不会触发更新。37、容器提供了一个层次结构让你去布局组件。38、flex最顶层容器叫application。39、flex容器有两种,一种是布局容器(layoutcontainer),另一种为导航容器(navigatorcontainer)。布局容器用于布局子组件/子容器的大小和位置。导航容器用于多个容器的导航。导航容器只能够用mx容器及spark的NavigatorContent容器。40、mx组件容器只能存放继承自UIComponent对像的组件,而spark容器可以放下实现IVisu
13、alElement接口的组件。IVisualElement在UIComponent对像的继承层次中被实现。41、mx容器与spark容器的主要区别在于mx组件的布局是固定的,而spark组件的布局是可以被替换的。42、创建策略(CreationPolicy)。创建策略指定了容器对子组件的初始化进程。创建策略有三个选项:ContainerCreationPolicy.AUTO/NONE/ALL。all:开始时初始化所有容器。NONE:不初始化所有子容器。AUTO:子组件在被需要时才创建,例如如果设置了AUTO选项,导航容器中除首页外,其它页的子组件在点击后才会被创建。43、如果把一个容器的lay
14、out属性设为null,即该容器会采用它父容器的布局。44、初始化事件顺序:preinitialize(自外向内),contentCreationComplete(容器特有,自内向外),initialize(自内向外),cteationComplete(自内向外)。45、容器中有一个enabled属性,如果该属性设为false,即所有节组件都处于enabled=false状态。46、容器中的defaultButton属性。设置该属性后,当用户在该容器上按回车键时,该按钮被触发。47、spark中的四种布局:BasicLayout(绝对定位或约束布局),HorizontalLayout(单行水平
15、布局),VerticalLayout(单身垂直布局),TileLayout(多行表格布局)。48、spark容器中如果放置一个大于该容器的组件,默认情况下该组件会越过容器显视。49、如果要把组件的显视限制在容器内,可以使用viewport和scrollbar。50、viewport定义了两个区域,一个为逻辑区域(logicalcontent),另一个为可视窗口(visiblewindow)。逻辑区域包括所有的子组件。显视区域是用户能看见的,是逻辑区域的一个子集。51、veiwport的contentHeight/contentWidth是逻辑区域的大小,它的大小由子组件决定。52、height
16、/width是可视窗口的大小。53、verticalScrollPosition/horizontalScrollPosition是可视化窗口相对于逻辑窗口的坐标。坐标为负时,可视化窗口向左上移。为正时向右下移。54、viewport中的clipAndEnableScrolling属性默认为false,即如果子组件的大小大于容器,那子组件将越过容器边界显视。如果设置为true,即超出容器部份将不显视。55、可以通过三种方法为容器增加滚动功能:1,增加HScrollBar/VscrollBar。2,把容器放到Scroller中。3,在容器使用的皮肤中加入Scroller。56、在H/VScrol
17、lerBar中设置viewport中指定该bar的目标容器。当滑动滚动条时,滚动条会改变容器的verticalScrollPosition/HorizontalScrollPosition的值。57、放在scroller中的容器的clipAndEnableScrolling的值为true。58、只有实现了viewport接口的容器都才能使用scroller。如果容器没实现viewport,例如BorderContainer、SkinnableContainer,即可以在此容器内放置scroller然后再放实现了viewport的容器。也可以先在scroller内先放置group,然后再放置没实
18、现viewport接口的容器。59、mx组件容器默认就支持滚动,当clipContent为true而且子组件超出容器边界时,滚动条自动出现。如果需要滚动条一直出现,可以设置horizontalScrollPolicy和verticalScrollPolicy属性为true。60、显视列表中对节点的操作方法,在Spark与mx组件中是不同的。主要的不同点是spark组件的方法名中大部份含有Element,而mx组件中则以Child代替。61、在显视列表中调用numElements/numChildren方法得到的是直接子节点的数目。62、flex/flash有三个坐标系统:全局(global),
19、本地(local),内容(content)。63、全局坐标是以舞台(stage)的左上角为坐标原点的坐标系统。在MouseEvent中有stageX和stageY属性就是全局坐标系统中的坐标轴。64、本地坐标是相对于组件左上角的坐标。所有组件都有的mouseX与mouseY属性指的是本地坐标系统的值。MouseEvent中的localX与localY也是本地坐标系统的值。而拖放操作中的xOffset与yOffset也是。65、内容坐标是是相对于组件内容的左上角。与全局和本地坐标不同的是内容坐标包括组件的内容区域。组件中的contentMouseX/contentMouseY属性是内容坐标的值。
20、66、在鼠标事件中的内容坐标与本地坐标是针对事件的目标对像,而目标对像并不是一定是你操作的对像。所以一般情况下你需要把本地坐标转化为全局坐标然后再把全局坐标转化为内容坐杆。67、所有的可视化组件中有关坐标的属性。contentMouseX/contentMouseY:鼠标在组件中的内容坐标。68、所有的可视化组件中有关坐标的方法:contentToGlobal/contentToLocal,globalToContent/globalToLocal,locatToContent/localToGlobal。69、布局(layout)分两部份,一部份为尺寸(sizing)另一部份是定位(posi
21、tioning)。70、布局管理器(layoutmanager)通过三个阶段去布局你的组件。保证阶段(Commitmentpass),测量阶段(MeasurementPass),布局阶段(LayoutPass)。在保证阶段,管理器先确认你设置的组件的一些与布局有关的值。此时管理器会调用各组件的commitProperties()。在测量阶段,管理器为各组件设置或计算一些尺寸相关的属性的默认值。此阶段管理器会调用各组件的measure()方法。在布局阶段,管理器会移动和设置组件以及相关的画图方法。此时管理器会调用各组件的updateDisplayList()。71、flex在程序初始化时(ini
22、tializes)时或在一些与布局相关的属性改变时会自动进行布局。72、在某些时候你需要手动调用组件的validateNow()方法强制进行重新布局。但此方法是计算集中型的计算,所以要确宝在需要时才调用。73、布局中常用的属性。x/y:相对于父容器的左上角坐标。在绝对布局中有效。height/width:调用像素值或百分比。top,bottom,left,right:该组件相对于父容器的上下左右距离。在约束布局/流布局中常常用到。这几个属性只在绝对布局中有效。74、flex布局是不考虑组件是否处于可视状态。也就是说不论组件是否可视,它都会在区域中占空间。但你可以通过includeInLayou
23、t设置组件是否参与布局。要注意的是includeInLayout只影响组件是否处于容器的布局中而不影响组件是否处于可视状态。75、布局中,adobe建议采用百份比的方式设置组件和容器的尺寸。76、在自动布局容器中,x/y属性的设置是不起作用的。77、Spacer是一个参与布局但不可见的控件。在一些规则布局的容器中Spacer可以起到占位的作用。另外如果把spacer的宽设为100%可以起到把左边元素各左布局,把右边的元素向右布局的作用。78、虽然在自动布局容器中,设置组件的x和y不会起作用。但你可以通过效果(effects)暂时改变组件的位置和大小。典型,例如当用户鼠标移动组件中,组件大小变化
24、原来的两位并移动到容器的最前面。79、在自动布局容器中,如果你把autoLayout属性设置为false,即容器不会自动布局。但此属性在mx容器中有一些情况会失效。80、组件的visible控制是否可见,而includeInLayout控件组件是否参与布局。81、基于约束布局常用的属性top/bottom/left/right这四个属性分别代码该组件相对于父容器的上下左右的距离。baseline代表组件中文字(标题)的底线与容器顶的距离。verticalCenter/HorizontalCenter是指组件中心与容器中心的距离。这些属性常与一些比例的尺寸使用,做到流性布局的效果。这些属性中有一
25、些是有冲突的,例如left/right与horizontalCenter。82、Application中有两个独特的事件:applicationComplete和error。applicationComplete在所有初始化工作完成后被调用。error即在httpservice调用失败后被触发。83、你可以在application标签中增加一个viewSourceURL属性,并指向一个文件。在运行过程中,在应用的任何一个空白地方右击都会出现一个查看源码的菜单。84、在application中还有一些属性可以设置。frameRate:帧率,帧/秒。默认值为24。pageTitle:作用和html
26、中的title一样。preloader:指向一个自定义进度条的swc或一个类。scriptRecursionLimit:定义as调用栈的深度,默认为100。scriptTimeLimit:在fp强制停止操作前,监听器能操作的时间。默认值也是最大值为60秒。usePreloader:是否使用默认的进度条。要使用进度条,app的宽度要大于160px。另外要注意的是上面的属性只能在mxml中被设置。85、flex中有两个进度条。一个为DownloadProgressBar(MX),另一个为SparkDownloadProgressBar(Spark)。你可以通过扩展以上类去实现自定义的进度条,也可以
27、通过继承Sprite,并实现IPreloaderDisplay接口。另外需要注意一个问题,进度条应尽量小地引用类库中的类,这样可以减小进度条的大小。86、为了改善性能和减小程序的大小,有一部份spark容器是不支持皮肤的。一般情况下,你使用Group和DataGroup去管理布局。使用SkinnableContainer/SkinnableDataContainer去管理布局及自定义皮肤。87、关于VerticalLayout/HorizontalLayout中的verticalAlign/HorizontalALign属性。除了常规的top/bottom等对齐方式外,还有justify:设置
28、子组件的高/宽和容器的高/宽一样。conentJustify:把全部子组件的高度设为各子组件中的最高组件的高度,或容器内容高度。88、VerticalLayout.variableRowHeight:设置每一行的高度是否由各子组件确定。HorizontalColumnWidth:设置每一行的宽度是否由子组件确定。两者的默认值为ture。如果设置为false,则每一行的宽度由rowHeight决定。如果rowHeight没决定,则由VerticalLayout.typicalLayoutElement决定。如是要各元素都很小,则宽度由第一个元素的高度决定。89、控制栏(Controlbar)的好
29、处是当容器出现滚动时,控制栏的绝对位置始终不变。默认情况下,在Panel中的控制栏在panel的底部。如果需要改变控制栏的位置可以修改默认的PanelSkin。90、TitleWindow是Panel的一个子类,只要用于弹出窗的使用。TitleWindow被设计为可拖放,右上角有默认的关闭按钮等。91、可以使用PopUpManager.createPopUp(parent:DisplayObject,class:Class,modal:Boolean=false):IFlexDisplayObject。弹出窗口并不会阻止主窗口脚本的执行。使用removePopUp()方法移除弹出窗口。使用Ti
30、tleWindow的常规流程为新建一个继承自TitleWindow的自定义组件。然后在上面定义一些事件处理。移除方法一般为PopUpManager.removePopUp(this)。的itemRenderer-item(如果实现了IVisualElement或DisplayObject本身。如果上面的都没有或不符合,那会报错。104、可以用一个独立的文件自定义itemRender也可以直接在数据容器内实现itemRender。105、List类型的控件,如果dataPrivider的数据是简单类型,如String/Number时,List会直接显视该对像。如果是复杂类型,你需要指定label
31、Field/labelFunction或重写itemToLabel()方法。106、list类组件的事件。caretChange:焦点从一个选项到另一个选项。change:选择项由手动触发变化。changing:选择项改变前发出的事件,此事件发生时可调用preventDefault()阻止选择项的变化。valueComit:编程方式触发选择项变化。以上的事件都是spark.events.IndexChangeEvent的子类。107、List系统组件中支持布局的设置。这样使原来只支持垂直布局的List系列组件可以变为水平或方格布局。108、List系列组件中的一些属性。requireSelec
32、tion:如果为true,即List默认会把第一个选项设为被选项。如果为false,第一个选项为空。默认为false。selectedIndex:当前被选择的项的顺序,从零开始。如果requireSelecttion为false,可以把selectedIndex设为-1,表示不选中。selectedItem:当前被选中的项。109、caretitem意思是当前聚焦项。它可能与selectedItem为同一项,也可能不是。110、List系列组件是SkinnableDataContainer的子类。SkinnableDataContainer没有默认的itemRenderer,但List系列组件
33、有。下面是List系列组件所对应的itemRenderer。ButtonBar:ButtonBarButton;ComboBox:DefaultItemRenderer;DropDownList:DefaultItemRenderer;List:DefaultItemRenderer;TabBar:ButtonBarButton。111、在List组件中,你可以把allowMultipleSelection设为true,这样用户按着ctrl键可以选择多个项。112、List组件中的selectedIndices/selectedItems为被选中的序号和项,它们均为Vector对像。113、B
34、uttonBar和TabBar的作用类似于单选按钮,被点击时会发出itemClick事件。114、ButtonBar/TabBar可以把一个数组付值给dataprivider。这样就是一组简单的按钮,也可以把一个mx的ViewStack付给dataPrivider。这样ButtonBar/TabBar就会直接控制这组ViewStack。115、DropDownList和ComboBox的区别:ComboBox是DropDownList的子类。DropDownList就是一个纯单选的。而ComboBox除了选择外还可以手填。DropDownList中的prompt属性是没被选中时显视的文件。Dr
35、opDownList的主要事件有:close/open。116、在ComboBox中,如果你写入的值与集合中的不匹配,在change事件中,那selectedIndex的值为-3,对应的变量为:ComboBox.CUSTOM_SELECTED_ITEM。然后会调用ComboBox.labelToItemFunction方法把这个值转化为对像。所以如果你的集合为非简单元素,那你需要重写labelToItemFunction方法。117、在一个导航容器中可以使用WideRight效果在creationCompleteEffect中。然后在各子容器中的showEffec中使用WideUp,hideE
36、ffect中使用WideDown。这样的效果比较生动。118、DateChooser可以通过selectableRange设定可选日期范围,disabledRanges设置不可选日期范围,disableDays设置不可选的天。另外可以通过dayNames属性设置显视星期的文字。通过formatString可以设置日期的格式,例如:MM/DD/YYYY。另外可以通过parseFunction方法或inputFormat把输入的文字转化为日期对像。119、运行时加载图片支持以下格式:GIF/JPEG/PNG/SWF。在编译时加载支持GIF/JPEG/PNG/SVG/SWF。也就是说SVG文件只支持
37、编译时加载。另外SVG文件会受一些限制,例如不支持滤境、脚本等。200、image控件中,如果想运行时加载图片,可以在source里指定路径,例如:source=url。如果想在编译时加载图片,可以使用Embed,代码如下:source=Embed(source=assets/logo.jpg)。对于同一张图片,无论你引入多小次,图片也只会被加载一次。201、如果不设置width/height,image默认下会以图片的大小来显视。在设置width/height的情况下,根据scaleContent的值来决定是否放大或缩小图像到width/height的大小,另外根据maintainAspec
38、tRatio来决定是否改变横宽比例。202、在一幅图片中的rollOverEffect/rollOutEffect使用Reside效果会起到移到放大,离开缩小的效果。203、PopUpAnchor是一个弹出控件。它的作用是把它里面的控件显视在应用的最前端而它本身没有任何外观。一般在以下几种情景中会用到:一、在页面的某个地方显视操作回馈信息。二、类似搜索引擎中的相关提示框。双击某控件时,弹出的编辑小窗口。204、PopUpAnchor的displayPopUp控制它是否可见。PopUpAnchor里面组件的高宽先由popUpWidthMatchesAnchorWidth属性决定,然后是里面组件的
39、宽度。另外可以通过popUpPosition设置组件弹出时处于PopUpAnchor的位置。如果PopUpAnchor与Effect一起使用,效果会更好。205、进度条(ProgressBar)有两种,一种是显视具体进度的(Determinate),另一种是不显视具体进度的(Indeterminate)。206、ProgressBar有三种模式event(默认),polled,manual。event模式会通过source属性中对应对像的progress/complete转变状态。polled模式会通过bytesLoaded/bytesTotal转变状态。manual模式会通过手动设置maxi
40、num/mininum转变状态。207、ProgressBar有一个label属性,默认值为LOADINGxx%。这个属性可以手动设置,其中有四个占位符%1:已读字节数,%2:总字节数,%3:已完成的百份比,%:%符串。208、单选按钮(RadioButton),可以通过设置groupName属性把相同组的单选按钮归为一组。另外也可以定义一个,然后在单选按钮中设置group指定。后者的好处在于可以把相关事件设置统一设在group中。另外,RadioButtonGroup如果在mxml中定义,那要定义在中。209、NumericStepper是一个数字控件,Spinner是NumericStep
41、per的父类,可以用click事件联合Spinner配合其它控件使用。210、VideoDisplay是播放多媒体的控件,它没有边框及相关按钮。控制尺寸的属性有:maintainAspectRatio/height/width。按制播放的方法有:close/load/pause/play/stop。在VideoDisplay中可放入cuePoints(name/time)元素,同时在VideoDisplay中注册cuePoint事件,每当影片播放到指定点时,将触发cuePoint事件。如果是播放影片,可以在source属性在设置路径,如果是摄像头,可以调用attachCamera(cam)方法
42、。211、VideoPlay是拥用默认按钮的视频播放器。212、flex的文件控件有五个Label、RichText、RichEditableText、TextArea、TextInput。其中前四个为多行,最后一个为单行。前两个为只读,后三个为可编辑。213、MX文字控件的格式主要通过style和htmlText控制,而spark的文件控件格式主要通过FTE(FlashTextEngine)和TLF(TextLayoutFramework)。214、用于显视文字的主要控件有三个:Label,RichText,RichEditableText。三者中,左边最轻量级同时功能也最少,右边的相反。2
43、15、在支持tlf的控件中,可以直接在控件的textFlow节点中放一下TextFlow节点。TextFlow节点下可以放置类html的标签(标签的命外空间为s:)。另外你也可以直接设置控件的text属性,这样控件会忽略一些等标签。如果你使用content属性,TLF会解悉并转化为TextFlow对像。另外你也可以使用html标签文本放在一个xml对像中,然后使用TextFlowUtil.importFromXML(xml:XML)或TextConverter.importToFlow(str:String,type:String)转化为TextFlow对像。216、在mxml中相关的TLF元
44、素如果包含一些特殊字符例如等,你可以使用相关的转义字符代替,否则,你需要在相关标签中使用,在as中需要使用转义符或转义。217、当你需要在一个容器中放置多个相同类型的组件时,可以使用Repeater。用法是在一个容器内放置一个Repeater,然后在Repeater内放置一个组件,例如。Repeater需要设置一个dataprivider。而里面的组件可以通过repeater的ID.currentItem来引用当前组件代表的dataPrivider中的当前对像。HYPERLINK/blog/632771chapter2gettingstarted1、自定义组件命名空间格式:xmlns:Tag=
45、包名。例如:xmlns:MyComps:com.humanmonth.*。调用格式:。例如:。2、swc是flex组件的归档文件。3、数据绑定。一、在mxml中,组件用引用其它数据。当被引用数据被更改时,组件的值也会这被更新。4、flex的远程方法调用(Remote-procedure-callrpc)用于flex与服务端交换数据(发送/接收)。flex有多种RPC服务,包括soap,amf(java),http。MXML包含以下几种类型的RPC组件:soap、httpservice、remoteobject(amfprotocol)。5、在mxml文件中,在标签内定义一些非可视化组件。6、数
46、据模型(datamodel)。数据模型用于存储数据。可以使用标签,或as类。7、用定义数据模型的方法类似于直接写xml。例如:tt/fx:Model。8、数据验证。可以在mxml的标签中声明验证器,格式:9、使用样式表(css)。如果在mxml中使用标签,即标签必需要mxml文档根元素的直接子元素。10、常用的css选择器有class选择器和type选择器。使用type选择器时需要使用命名空间,语法如下:namespaceslibrary:/flex/spark;s|Button。11、mx及spark架构中的一个主要区别是Spark组件依赖皮肤去定义布局及外观。而mx组件依赖样式及皮肤。用m
47、x组件时,你更多地去用样式而用Spark时,你更多地是用皮肤是处理布局及外观。12、使用效果(effect)。使用效果的步骤是先在中定义一个效果,并在target中指明效果应用到的组件。然后在组件的相关事件中调用效果:effectId.play()。13、用mxml自定义组件。步骤:找一个和自定义组件相近的类,然后在里面添加或修改一些方法。调用方法与actionscript的自定义组件方法一样。14、在mxml中引用as中的静态变量时,使用fullpackage.class.Name型式。15、设置默认属性(settingthedefaultproperty)。很多flex组件定义一个单独的默
48、认属性。默认属性是一种速记机制,让用户不用输入属性名的情况下设置值。例如与是相等的。而里面的dataPrivider是默认属性。另外要注意,并不是所有的组件都有默认属性。16、在mxml中使用转义字符。若在mxml中使用字符中有数据绑定或转义符。即用正斜线转义。例如:,。17、换行符。你可以使用n或来代表换行。18、在定义一些变量前加上Bindable标记表示当该变量改变时,引用该变量的对像会被通知/自定修改。19、引入样式或脚本的语法:fx:Stylesource=url,fx:Scriptsource=url。20、在mxml中设置正则表达式属性:/regex/flags。21、用法上,a
49、s与mxml的关系与js和html相似。而编译的角度看,as与mxml的关系和servlet与jsp相似。22、无论是还是都必需是mxml文件根节点的子节点。22、使用,请在里面加上。23、MXML中,每个元素都有一个ID属性。你可以直接通过ID引用该元素。如果元素没有设置ID,你可以通过元素的父元素的getElementAt()、getChildAt()方法获取元素。最后,你还可以通过方括号名称的方式来获取元素。24、this是对当前文档、对像、闭包的引用。25、在as中创建可视元素的步骤是:先创建元素,然后加入到容器,最后设置元素的属性。创建元素后,如果不加入到容器中,对像不会被显视。加入
50、容器的语法是MX架构:addChild()/addChildAt(),Spark架构:addElement()/addElementAt()。26、默认情况下,元素被加入到容器的最后一个元素后面。如果你要指定顺序,即需要用addElementAt()或调用addElement()后调用setItemIndex()。前者效率会高一点。27、删除元素。在Spark中,可以用removeELement(),removeElementAt(),removeAllElements()方法删除元素。如果要是MX架构,即用Child替换上面的Element。28、当调用容器的remove相关函数后,元素就会
51、从显视列表中去除。然而这并不代表对像会被GC删除。紧当被删除元素在外面没有被引用时。flashGC才会在适当的时候删除对像。适时删除无用元素会大大改善性能。29、只有实现了IVisualElement接口的对像才能加入到显视列表的容器中。如果对像没有实现IVisualElement接口而想加入到显视列表时,可以把对像先放到UIComponent后再加入到显视列表。例如:newUIComponent().addChild(newSprite();30、引用。FlexGlobals.topLevelApplication是对根application的引用。parentDocument是在文档链中对
52、当前文档的上一层文档的引用。parentApplication是在应用链中对当前应用的上一层应用的引用。当被载入的应用与主应用不在同一应用域(ApplicationDomain)或安全域(SecurityDomain)时,上述引用不会生效。31、在mxml中,元素的事件属性代码在mxml编译后会变成一个方法。所以在元素事件属性中的代码的this是对文档的引用而不是那个元素。32、在mxml中引用as代码有两种方法,一种是。另一种是include指令:includefilename;格式:includepac/filename.as。source支持相对或绝对路径。而include指令紧支持相对
53、路径。include指令可放在if语句中(语句块中要求只有include指令)。33、as的内省(introspection)机制有两种。它们常在调试过程中使用。一种为forin循环。另一种为as的api。34、forin循环会把动态加入的属性及方法打印出来。然后大部份的as对像并不是动态对像,所以的forin循环中,绝大部份对像不会显视属性及方法。用forin循环打印动态属性及方法与用mx.utils.ObjectUtil.toString()方法的效果一样。35、内省api。flash.utils.desctibeType()。它们打印出public属性及方法而不会打印私有的。返回的结果为
54、一个xml。36、事件可以让程序员知道事情发生。鼠标、键盘、网络请求、组件生命周期等等都会触发事件。37、flash显视列表的根元素为Stage,往下为:SystemManager-Application-其它显视组件。这个列表我们称为显视列表(displaylist)。38、显视列表的事件模型:捕获-目标-冒泡。即发生事件后,事件会延着显视列表树从顶层到目标然后再冒到顶层。39、事件被触发时,fp(flashplayer)会创建一个事件对像,然后这个事件对像将在事件的三个阶段中传递。在传递过程中,事件对像的某些属性会被改变。你可能通过这些属性知道事件的所在的阶段。40、flash.event
55、s.Event为事件的基类。他的子类分布在spark.events.*,mx.events.*,flash.events.*中。另外还有一些特殊作用的事件类分布在另外一些包中。例如mx.messaging.events41、显视列表中的任何对像都继承自DisplayObject,而DisplayObject继承自EventDispatcher。EventDispatcher为显视列表中的所有类提供了事件模型的功能。42、显视列表中的任何对像都可以通过继承自EventDispatcher的addEventListener来监听事件。只要事件流通过该对像,该对像的监听器都会被触发。43、Event
56、Dispatcher从名称上说,主要功能为分发事件。但在使用过程中,更多是用于添加与移动监听事件。44、当你需要事件模型中的功能,但又不能继承EventDispatcher时,可以实现IEventDispatcher接口。45、除了由fp发送事件对像外,有些时候你可能需要自已发送事件。这时你可能通过dispatchEvent方法发送自定义事件到事件流中。46、event对像中的target为触发事件的对像。currentTarget为正在处理事件的对像。47、在mxml的元素中的事件属性直接添加事件时,如果使用click=functionname()时,event对像不会被传入到方法中。如果要
57、传入event对像,需要click=functionname(event);48、addEventListener中的use_capture参数为true时表示监听器在捕获阶段被调用,如果为false表示在冒泡阶段被调用。如果不指定,那默认值会根据事件类型的不同而不同。如果你需要在事件的两阶段都解发事件,那你需要调用两次addEventListener。use_capture参数一次为true,另一次为false。49、addEventListener中的priority。如果不设置,priority默认值为0。这种情况下,先调用addEventListener的监听器会先被调用。如果设置了p
58、riority,即priority的值越高,越早被调用。50、addEventListerer中的weakRef。默认为false。如果此值为false,即此监听器不会被GC回收。如果为true,此监听器会被GC回收。51、方法闭包在每次被调用时都会被创建。闭包的作用域在定义它的地方而不在调用它的地方。例如,闭包内引用外面的一个变量y,在调用它的方法外面也有一个变量y。即运行时,闭包引用的是定义的类中的y。52、在addEventListener中使用闭包时,参数中的userWeepRef如果设为true,在gc运行时可能会把闭包回收。这样会出现不可预期的错误。53、类级别的定义不会被GC回收
59、,闭包除外。54、使用addEventListener设置的监听器不再被使用时,应该用removeEventListener移除。而在mxml中直接给onclick付值的方式增加的监听器不能被移除。55、为一个对像的同一种类形事件添加多个触发器的方法:在mxml的事件属情中有分号隔开多个监听器。例如:listener1();listener2()。或者利用addEventListener多次:obj1.addEventListener(click,m1);obj1.addEventListener(click,m2);56、在监听器中实现多个参数。由于addEventListener参数中的f
60、unction是一个方法,且参数固定为event。如果要实现监听器多参数,方法有三个。一、闭包。因为闭包中变量的作用域是定义它的地方。例如:obj.addEventListener(click,function(event)fun(p1,p2)。二、在mxml的标签属情中设置监听器,因为在mxml中设置监听器时,参数是随意的。例如click=fun(event,p1,p2)。三、把参数放在currentTarget对应的对像中。在实际使用过程中,第三种方法最简单。57、手动分发事件。由于UIComponent-DisplayObject-EventDispatcher。所以显视列表中的所有对像
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南建筑安全员-C证考试(专职安全员)题库附答案
- 贵州大学《钢琴合奏》2023-2024学年第一学期期末试卷
- 贵州财经大学《社会经济调查与写作》2023-2024学年第一学期期末试卷
- 2025吉林建筑安全员-C证考试(专职安全员)题库附答案
- 贵阳信息科技学院《韩国语听力》2023-2024学年第一学期期末试卷
- 硅湖职业技术学院《房屋建筑学A》2023-2024学年第一学期期末试卷
- 2025山东省建筑安全员《C证》考试题库及答案
- 广州幼儿师范高等专科学校《级管理与主任工作实务》2023-2024学年第一学期期末试卷
- 2025江西建筑安全员《C证》考试题库及答案
- 广州卫生职业技术学院《生态环境与人类发展》2023-2024学年第一学期期末试卷
- 民间借贷利息计算表
- 《古兰》中文译文版
- 现代电路技术——故障检测D算法
- 检验科各专业组上岗轮岗培训考核制度全6页
- 钣金与成型 其它典型成形
- 工程停止点检查管理(共17页)
- 爬架安装检查验收记录表1529
- 八卦象数疗法
- 2021年全国烟草工作会议上的报告
- 电气工程课程设计——车间动力及照明设计
- (完整版)视频监控系统用户操作手册
评论
0/150
提交评论