Flex经验和问题总结
? 1.????????如何保持按钮第一次按下不弹起,直到再下一次按下才弹起? ??? ?<mx:Buttonid="btnAction" click="doAction()" ??????? ?????? toggle="true" selected="false"/> Button的toggle属性设置按钮能否进行切换。 如果该值为 true,则单击按钮将在选中状态和未选中状态之间进行切换。可以通过Selected属性获取或设置此状态。 ? 2.????????如何实现Sleep函数? 采用flash.utils.setTimeout函数实现,如下例: private function launchAlert():void { ? 3.????????如何动态指定DataGrid的itemRenderer? var dgc : DataGridColumn = new DataGridColumn(); ? 4.????????如何动态指定DataGrid的排序函数? private static functionsortFunc(field:String):Function{???? ??? return functionsortLevel(itemA:Object,itemB:Object):int { return ObjectUtil.numericCompare(itemA[field],itemB[field]); ?????????? ?? } } …… var dgc : DataGridColumn = new DataGridColumn(); dgc.sortCompareFunction= sortFunc("column"); ? 5.????????如何实现在DataGrid的列中显示图片? 采用itemRenderer实现,如下: var dgc : DataGridColumn = new DataGridColumn(); dgc.itemRenderer = new ClassFactory(view.ImageCellRenderer); 或者 <mxDataGrid id="dgShipWeight"dataProvider="{_acData}"> ImageCellRenderer.mxml文件内容如下: <?xml version="1.0"encoding="utf-8"?> <mx:VBoxxmlns:mx="http://www.adobe.com/2006/mxml" width="400"height="300"> ??? <mx:Script> ??????? <![CDATA[ ??????? override public functionset data(oItem:Object):void ? ????? { ??????? ??? if (oItem != null) { ??????? ???? var?csLevel:String = oItem.risk; ??????? ????? if (csLevel == "高级") ??????????????? { ??? ??????????? ? image.source= "images/high.JPG"; ??? ?? ???????? } ??? ?? ???????? else ??????????????? { ??? ??????????? ? image.source= "images/connect.JPG"; ??? ?? ???????? } ??????? ??? } ? ????? } ??????? ??????? ]]> ??? </mx:Script>??? ??? <mx:Imageid="image"/> </mx:VBox> ? 注意:如果在ImageCellRenderer的creationComplete调用的函数中进行图片的动态加载,将出现乱序的问题。 ? 6.?????????如何获取DataGrid总数据行? Flex里面有一个public property:rowCount,那个是“获取或设置在列表中至少部分可见的行的行数”,并不能获得总的数据行。除此以外,好像没有什么属性、方法,可以直接获取DG总数据行数。在数据库里查找倒是很简单的。 后来,我发现,如果设置selectedindex大于总的数据行数,那该索引指向的便是数据行的最后一行。由此便得到一个获取DG数据行的曲线方法。 var selectedRow:int; var tempCount:int=1000; var rCount:int; selectedRow=dg.selectedindex; dg.selectedindex=tempCount; rCount=dg.selectedindex+1; dg.selectedindex=selectedRow; rCount就是总行数,因为Index是从0开始的,故此要加一。 tempCount设置是一个默认比行数多的数。 ? 7.?????????如何增加右键单击菜单? 初始化右键菜单,增加菜单项: private function InitContextMenu():void { ??? var contextmenu: flash.ui.ContextMenu = new flash.ui.ContextMenu(); ? ? contextmenu.hideBuiltInItems(); ??? varcontext_menuItem : ContextMenuItem = new ContextMenuItem("测试右键菜单..."); ??? contextmenu.customItems.push(context_menuItem);???? ??? context_menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,testRightMenu); ??? this.contextMenu= contextmenu;???? ???????? } ? 实现右键菜单功能: private function testRightMenu(event: ContextMenuEvent):void { ??????? Alert.show(“Test right click menu!”);??? } ? 8.?????????FLEX 如何POST大量数据? 如下是提交一段XML数据到WEB服务器上 var request:URLRequest=new URLRequest("http://xxx.com/2.0/flex_save.php"); ? 9.????????用IE6 通过HTTPS访问FLEX的功能存在问题 分析:IE6 HTTPS 下载问题,解决方法:修改WINDOWS注册表,如下 reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionInternet Settings" /v"BypassSSLNoCacheCheck" /t "REG_DWORD" /d "1" /f ? 10、曲线控件增加背景栅格? <mx:backgroundElements>? ? 11、在IE和FIREFOX上同时支持JAVASCRIPT和FLEX的交互 function getSwf(swfName) ? function init() ? function testCall() } ? 12、关于FLASHPLAYER的版本检测? 可以通过JAVASCRIPT、ACTIONSCRIPT等方式进行版本检测。最好的方式是通过JS进行版本检测,例如在登录页面进行版本检测。 用FLEX BUILDER3 编译的程序运行要求FLASHPLAYER>9.0.28就可以,但是考虑到9.0.115以及以前的版本存在严重的安全漏洞,因此FLASHPLAYER版本要求>=9.0.124。 ? 13、曲线控件的横坐标轴的文字旋转/倾斜问题 ?????? 曲线控件需要使用设备嵌入字体。 <mx:Style source="css/style.css"> style.css @font-face { 如果是中文,则可以使用宋体,不能同时使用2种设备嵌入字体。 注意:生成的SWF包含嵌入字库,因此文件会比较大。 ? 14、SWF文件安全沙箱在本地运行的问题。 ????? 解决办法就是在编译时,加个参数 -use-network=false 。 ? 15、如何关闭SWF文件中的调试信息。 ????? 为了缩短下载时间,对比一下使用 RSLs 前后的应用程序的大小是很有益的。默认情况下,Flex Builder 向 SWF 文件里加入了调试信息,所以,要看程序真实的大小,请关闭调试信息。想要关闭调试信息,可以在 Flex 编译器属性对话框的 Additional CompilerArguments 那一部分加上 -debug=false。 ? 16、Flex 中的元数据标签 [Bindable]就是所谓的元数据标签。元数据标签是一种特殊的标签,它在代码中的作用就是向编译器提供如何编译程序的信息。实际上,这些标签并没有被编译到生成的SWF文件中,而只是告诉编译器如何生成SWF文件。例如: [ArrayElementType] ? 17、DATAGRID的列支持自动换行功能 ????? DATAGRID增加属性:variableRowHeight="true",同时列设置的wordwrap=”true”. ????? 注意: ????? 当列中显示的文字超过一定限制时,将无法显示完全,这时只能采用itemrender的方式解决。 ? 18、如何判断对象的某个属性是否存在? ????? 通过typeof(objEvent.evttime)== 'undefined' 判断可能不准确,准确的方法是通过hasOwnProperty判断,或是通过如下方法: ????? Public function test(obj): Boolean { ????? ?for(var property in obj) ????? ?{ ????? ???? return true; ????? ???? ????? ?} ????? ?return false; } ? 19、如何在曲线中增加刻度标记显示? ????? 通过如下方法设置: ????? setStyle("itemRenderer",new?ClassFactory(mx.charts.renderers.CircleItemRenderer));: ????? 或者属性中增加: itemRenderer="mx.charts.renderers.CircleItemRenderer" ? 20、60个点的曲线加载速度非常慢? ?????? 分析原因是因为纵坐标刻度值太大,而曲线的纵坐标设置了如下属性:minorInterval=1,interval="1"导致的,去掉该属性设置,或者根据曲线值动态设置属性即可解决问题。 ? ? 21、如何修改Alert.show弹出对话框中按纽的文字? 通过设置按钮标签(Alert.okLabel,Alert.cancelLabel,Alert.noLable)修改按钮文字,例如将OK按钮文字修改成”确认”。 Alert.okLabel = “确认”; 然后再执行Alert.show(…); ? 22、通过https的低端口访问swf文件出现security error错误 当与一个主机建立一个Socket连接时,Flash Player要遵守如下安全沙箱规则. 复制内容到剪贴板 代码: <?xml version="1.0"?> ? ? 23、Flex中如何在点击PieChart图表数据块时获取具体数据内容的例子 ????? PieChart?组件定义如下: ?? <mx:PieChart?id="pieChart" ??? ? ? ? ? ?dataProvider="{dp.product}" ??? ? ? ? ? ?itemClick="pieChart_itemClick(event);" > ?? ?? ? ? <mx:series> ?????????? ? … ????? </mx:PieChart> ????? ????? 点击函数实现如下: ?? private functionpieChart_itemClick(evt:ChartItemEvent):void { var psi:PieSeriesItem = evt.hitData.chartItemas PieSeriesItem; ??Alert.show("data=" + psi.item.@data + "n" +"percentValue=" + psi.percentValue.toFixed(1) + "%","label=" + psi.item.@label); ? 24、如何在PieChart的数据发生变化时弹出显示的例子 ?PieChart组件定义如下: <mx:PieChart?id="pieChart" > ?? ? ??<mx:series> ?? ??? ? ? ? id="series" ?? ? ? ? ? ? ??nameField="name" ?? ? ? ? ? ? ??field="avg" ?? ? ? ? ? ? ? ?labelPosition="callout" ?? ? ? ? ? ? ??labelFunction="series_labelFunc" ?? ? ? ? ? ? ??filters="[]"?/> ?????????? ? … </mx: PieChart> ? 通过如下代码实现分离: var arr:Array =[]; if (evt.value>= 0) { ??? arr[evt.value] = 0.2; } series.perWedgeExplodeRadius= arr; ? 25、如何动态增加LineChart的曲线? LineChart组件定义如下: <mx:LineChartid="BytesChart" … /> 代码实现如下: varobjTemp:LineSeries = null; objTemp = newLineSeries(); objTemp.displayName= objLine.name; objTemp.yField=? objLine.field; objTemp.setStyle("lineStroke",objStroke); BytesChart.series.push(objTemp); ? 26、如何禁止多条曲线中某条曲线不显示? <mx:series> ??????? <mx:LineSeries ??????? ?????????? ??? ???interactive="false" ??????? ??????????????? … ??????? /> ??????? … </mx:series> ? 27、如何不显示曲线图形中的横坐标? <mx:horizontalAxis> <mx:CategoryAxisid="httpaxis" categoryField="dtime"ticksBetweenLabels="false"/> </mx:horizontalAxis> <mx:horizontalAxisRenderers> ??????? <mx:AxisRenderertickPlacement="none" axis="{httpaxis}"/〉 </mx:horizontalAxisRenderers> ?????? 28、如何让曲线图形中的横坐标隔几个单元画刻度线? 重载mx.charts.AxisRenderer类的updateDisplayList函数,并改写函数drawTicks,同时增加属性tickGap. ? 29、如何防止柱图在数据较小的时候出现小数? 增加纵坐标的设置,对VerAxis的最大值maximum属性根据数据进行动态设置, 设置代码如下: VerAxis.maximum ={数据最大值} + n(具体值根据曲线图形高度调整) ? <mx:verticalAxis>? ??? <mx:LinearAxis id="VerAxis" baseAtZero="false" maximum="10"? ???//根据曲线图形大小设置 minimum="0"/>? ?//防止出现负数 </mx:verticalAxis>? ? 30、在曲线图形中如何防止一些中间点的显示? 在纵坐标最小值minimum="0"的情况下,将不需要显示的点的纵坐标数值设置成-1即可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |