加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex经验和问题总结

发布时间:2020-12-15 01:06:46 所属栏目:百科 来源:网络整理
导读:? 1.????????如何保持按钮第一次按下不弹起,直到再下一次按下才弹起? ??? ?mx:Buttonid="btnAction" click="doAction()" ??????? ?????? toggle="true" selected="false"/ Button的toggle属性设置按钮能否进行切换。 如果该值为 true,则单击按钮将在选中

?

1.????????如何保持按钮第一次按下不弹起,直到再下一次按下才弹起?

??? ?<mx:Buttonid="btnAction" click="doAction()"

??????? ?????? toggle="true" selected="false"/>

Button的toggle属性设置按钮能否进行切换。

如果该值为 true,则单击按钮将在选中状态和未选中状态之间进行切换。可以通过Selected属性获取或设置此状态。
如果该值为 false,则用户释放按钮后,它不再保持按下状态。 在这种情况下,它的 selected 属性始终为 false。

?

2.????????如何实现Sleep函数?

采用flash.utils.setTimeout函数实现,如下例:

private function launchAlert():void {
? ? Alert.show("I'm an alert.");
}
2秒后执行这个方法
flash.utils.setTimeout(launchAlert,2000);

?

3.????????如何动态指定DataGrid的itemRenderer?

var dgc : DataGridColumn = new DataGridColumn();
dgc.itemRenderer = new ClassFactory(view.ListCell);

?

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}">
????<mx:columns>
??????<mx:Array>
?????? <mxDataGridColumnheaderText="level" editable="false"
????????????itemRenderer="ImageCellRenderer "/>
??????</mx:Array>
????</mx:columns>
?</mxDataGrid>

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");
request.method=URLRequestMethod.POST;
var vars:URLVariables = new URLVariables();
vars.xml=expxml() // 这里是一大串字符串
vars.name=savename.text;// 这里是小串字符串
request.data=vars;
var loader:URLLoader=new URLLoader()
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.load(request) ;
loader.addEventListener(Event.COMPLETE,onSaveOver) ;

?

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>?
????<mx:GridLines direction="both"
????? horizontalChangeCount="1"verticalChangeCount="2"
????? horizontalTickAligned="true"?verticalTickAligned="true">?
?????<mx:horizontalStroke>?
??????<mx:Stroke weight="2"color="green"/>?
?????</mx:horizontalStroke>?
?????<mx:horizontalFill>?
??????<mx:SolidColor color="black"alpha=".66"/>?
?????</mx:horizontalFill>?
?????<mx:horizontalAlternateFill>
??????<mx:SolidColor color="black"alpha=".66"/>?
?????</mx:horizontalAlternateFill>
?????<mx:verticalStroke>?
??????<mx:Stroke weight="1"color="green"/>?
?????</mx:verticalStroke>?
?????<mx:verticalFill>?
??????<mx:SolidColor color="black"alpha=".66"/>?
?????</mx:verticalFill>?
?????<mx:verticalAlternateFill>?
??????<mx:SolidColor color="black"alpha=".66"/>?
?????</mx:verticalAlternateFill>?
????</mx:GridLines>?
???</mx:backgroundElements>

?

11、在IE和FIREFOX上同时支持JAVASCRIPT和FLEX的交互

function getSwf(swfName)
{
?
?? ?if (navigator.appName.indexOf("Microsoft") != -1)
?? ?{
?? ??return window[swfName];
?? ?}
?? ?else
?? ?{
?? ??return document[swfName];
?? ?}
}

?

function init()
{
?setTimeout("testCall()",1000);
}

?

function testCall()
{
?var xml = "1234";
?var obj = getSwf("AbcSwf");
?try
?{
??obj.ProcessData(xml);
?}
?catch (e)
?{
??alert(e.name + ": " + e.message);
?}
?finally
?{

}

?

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">
</mx:Style>?

style.css

@font-face {
??src: local("Arial");
??font-family: EmbeddedArial;
?}
??? ColumnChart {
??????? fontFamily: EmbeddedArial;
??????? fontSize: 10;
?}

如果是中文,则可以使用宋体,不能同时使用2种设备嵌入字体。

注意:生成的SWF包含嵌入字库,因此文件会比较大。

?

14、SWF文件安全沙箱在本地运行的问题。

????? 解决办法就是在编译时,加个参数 -use-network=false 。

?

15、如何关闭SWF文件中的调试信息。

????? 为了缩短下载时间,对比一下使用 RSLs 前后的应用程序的大小是很有益的。默认情况下,Flex Builder 向 SWF 文件里加入了调试信息,所以,要看程序真实的大小,请关闭调试信息。想要关闭调试信息,可以在 Flex 编译器属性对话框的 Additional CompilerArguments 那一部分加上 -debug=false。

?

16、Flex 中的元数据标签

[Bindable]就是所谓的元数据标签。元数据标签是一种特殊的标签,它在代码中的作用就是向编译器提供如何编译程序的信息。实际上,这些标签并没有被编译到生成的SWF文件中,而只是告诉编译器如何生成SWF文件。例如:

[ArrayElementType]
使用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要遵守如下安全沙箱规则.
? ? 1.Flash的.swf文件和主机必须严格的在同一个域名,只有这样才可以成功建立连接.
? ? 2.一个从网上发布的.swf文件是不可以访问本地服务器的.
? ? 3.本地未通过认证的.swf文件是不可以访问任何网络资源的.
? ? 4.你想跨域访问或者连接低于1024的端口,必须使用一个跨域策略文件.

? ? 如果尝试连接未认证的域或者低端口服务,这样就违反了安全沙箱策略,同时会产生一个securityError事件.这些情况都可以通过使用一个跨域策略 文件解决.无论是Socket对象还是XMLSocket对象的策略文件,都必须在连接之前通过使用 flash.system.Security.loadPolicyFile()方法载入策略文件.具体如下:
? ? Security.loadPolicyFile("http://www.rightactionscript.com/crossdomain.xml");
? ? 获得的改策略文件不仅定义了允许的域名,还定义了端口号.如果你不设置端口号,那么Flash Player默认为80端口(HTTP协议默认端口).在<allow-access-from>标签中可以使用逗号隔开设置多个端口号.下 面这个例子就是允许访问80和110端口.

复制内容到剪贴板

代码:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
? ?<allow-access-fromdomain="*" to-ports="80,110" />
</cross-domain-policy>

?

?

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即可。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读