1. 如何保持按钮第一次按下不弹起,直到再下一次按下才弹起?
<mx:Button id="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的排序函数?
privatestatic function sortFunc(field:String):Function{
return function sortLevel(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>
<mxDataGridColumn headerText="level" editable="false"
itemRenderer=" ImageCellRenderer "/>
</mx:Array>
</mx:columns>
</mxDataGrid>
ImageCellRenderer.mxml文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
<mx:Script>
<![CDATA[
overridepublic function set 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:Image id="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();
var context_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_MACHINE/SOFTWARE/Microsoft/Windows/
CurrentVersion/Internet 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 Compiler Arguments那一部分加上-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-from domain="*" 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 function pieChart_itemClick(evt:ChartItemEvent):void {
var psi:PieSeriesItem = evt.hitData.chartItem as 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:LineChart id="BytesChart" … />
代码实现如下:
var objTemp:LineSeries = null;
objTemp = new LineSeries();
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:CategoryAxis id="httpaxis"
categoryField="dtime" ticksBetweenLabels="false"/>
</mx:horizontalAxis>
<mx:horizontalAxisRenderers>
<mx:AxisRenderer tickPlacement="none" axis="{httpaxis}"/〉
</mx:horizontalAxisRenderers>
28、如何让曲线图形中的横坐标隔几个单元画刻度线?
重载mx.charts.AxisRenderer类的updateDisplayList函数,并改写函数drawTicks,同时增加属性tickGap.
29、如何防止柱图在数据较小的时候出现小数?
增加纵坐标的设置,对VerAxis的最大值maximum属性根据数据进行动态设置,设置代码如下:
VerAxis.maximum = {数据最大值} + n(具体值根据曲线图形高度调整)
<mx:verticalAxis>
<mx:LinearAxisid="VerAxis"
baseAtZero="false"
maximum="10" //根据曲线图形大小设置
minimum="0"/> //防止出现负数
</mx:verticalAxis>
30、在曲线图形中如何防止一些中间点的显示?
在纵坐标最小值minimum="0"的情况下,将不需要显示的点的纵坐标数值设置成-1即可。
1.使用Flex Bulider3建立一下新 的.mxml的页面时默认的背景是蓝色的,请问用什么办法能修改掉此背景颜色,以至于下次创建时背景不是为默认的蓝色的呢?请写出你认为正确的 方法.
2.使用Flex Bulider3如何跟踪程序?
3.请问enterFrame和timerEvent这2个事件有什么区别?请说下具体的使用方法和相关的使用场合?
4.请说下你理解AS3的事件机制是什么机制?你认为正确的就可以说出来.
5.请问addEventListener里面有几个 参数,你能说出具体的使用方法嘛?
6.请问我想判断一个字体是否是数字,用什么办法去判断呢?
7.请问我想判断一个字符或者一个对象的类型怎么判断呢?
8.请问你了解 internal 控制符么?能说下具体使用方法和场合嘛?
9.我想在某一点不去执行任何内容,也就是说我想停止执行了,你知道要怎么做嘛?
10.请问 undefined 和 null 是否一样,如果不一样能否说出其 中的区别呢?
11.创建常量知道怎么创建嘛?说下你是怎么创建的.
12.请问用什么方法自定义一个事件呢?说下具体的方式.
13.请问怎么样检测本机的内容呢,比如说,我想知道本机的操作系系,是否有视频等这些.
14.请问用什么办法解决安全域的问题?如果你不知道安全域的问题的话,可以在本机中绑定一下图片,然后再放到 服务器上,就会出现此问题了.
15.有三种基本数字类型: number, int, 和uint 请问有什么区别.具体说一下.
16.parseInt此方法转化为int型的方法,请问你知道此方法的第二个参数是什么意思嘛?
17.Math.round( ), Math.floor( ) 和Math.ceil( ) 三个方法都是四舍五入,请问有什么区别?
18.请问一 个数组里可以放不同的类型嘛?
19.var letters:Array = ["a", "b", "c"];我想在这个数组里搜索 ‘b’ 字符,请问怎么办?
20.怎么样转换数组为字符串,怎么样将字符串转化为数组?
21.我想创建的视图居中怎么办?
22.请问知道层级的概念嘛?如果知道请问怎么样交换2个组件的层级呢?
23.请问你知道loader,URLLoader,URLStream这个三种动态加载资源的具体使用场合,以及有什么区别嘛?
24.如何把MouseEvent 的localX 和localY 属性转化成全局坐标?
25.请问我现在有一个正方形的图片,我想把他做成圆形,有什么办法呢?前提是用flex或者as3
26.请问新创建的一个sprite能否被直接加到ui容器里?如果不能请说出用什么办法能加入.
27.我怎么设置把一个文本框,设置成一个密码框?
28.我想在文本框里只能输入abcd,有什么办法能做到呢?如果我想输入除abcd以外的其它都能输入又怎么做呢?
29.请问condenseWhite 这个属性在TextInput里是表示什么意思?
30.我现在刚创建的文件的text为 this is a text,我想设置光标在 is 上,请问怎么设置?
31.请问怎么样在文本框里添加超链接?
32.我想获取系统里的字体,请问怎么办?
33.substring( ),substr( ), slice(),请说下3种解析字符串的不同之处,以及适用场合?
34. var fruits:XML =
Apple
Orange
Pear
Watermelon
;
以下有一个字符串,我现在知道了color为orange,我想知道此color相对应的name节点的值,我应该怎么做?
35.请说下目前使用flex和后台交互的几种方法,以及适用场合.
36.我现在想在flex里调用JS方法,我要怎么办呢?
37.我想用JavaScript调用ActionScript 函数,我要怎么办呢?
38.FileReference 请说下此对象的几个相关事件
组件
1.我不想在容器里显示滚动条怎么办?
2.请问Flex bulider3可以创建几种不同的项目?
3.你了解RSL嘛?请说明下RSL的使用方法,以及使用RSL为了解决什么问题?
4.请问SWC是做什么用的,怎么样自己制作一个SWC?
5.flex生成出来的文件都是很大,请问你用什么办法进行缩小呢?
6.请问 trace( NaN == NaN ) 结果为true 还是false,为什么?
7.warning: unable to bind to property ” on class ‘Object’ (class is notan IEventDispatcher) 在使用ItemRender时,经常会出现这种警告,请问想去除的话怎么办呢?
8.现在流行MVC,但是as代码有的时候还是大部分写在mxml里面,请问我想代码分离怎么办呢?
9.我想继续UIComponent重新写一个正方形的组件,我应该怎么做?请说重点部分即可.
10.常用的几个切换数据的组件比如: TabNavigator等都有属性 creationPolicy 你知道这种策略的使用方式是什么嘛?以及优,缺点呢?
11.我想在application里获取当前运行的URL,我要怎么获取.
12.请说下事件里的currentTarget 和 target的区别?
13.请列举下你常用的几种effects,并说明使用原因.
14.HBox,VBox和canvas有什么区别呢?试说出其中几点
15.请问我想在list里选中多行信息,我要怎么做呢?
16.Alert里面有几个属性,我想设置图片怎么办呢?
17.请问你是否设置过样式呢,我想动态设置样式怎么办呢?如果我想在as代码里设置样式我又要怎么办呢?
18.你能说一下UIComponent的生命周期嘛?以及相关的使用场合呢?
19.请问你是否发现过 flex3里的bug呢,请列举一些?
20.列举出flex里面的几个绑定数据对象的方式
21.请问我自己定义了一个组件,我想在组件里的属性里设置几个默认值,我要怎么设置呢?
22.callLater()方法怎么使用,为什么要使用这个方法呢?
23.请问你是否使用过module这种方法去做项目呢?他的优,缺点是什么呢?使用组件的方式加载的话,他的优,缺点是什么呢?
24.目前网页里都有导航,请问在Flex要做导航要注意一些什么呢?以及怎么样做呢?
25.我想在一个错误的图片链接里,定义一下默认的图片怎么做呢?
26.请试写一个自定义的验证组件
27.请说明下tigger tiggerEvent 在验证组件里是什么意思,具体怎么使用呢?
28.ExternalInterface, LocalConnection 2者有什么区别?
29.你是否使用过flex的测试工具呢?请说明下具体是哪种,以及使用方式,你为什么使用这种工具?
30.我能把CSS编译成swf嘛?
31.请用as3列举下你用过的模式
32.Embed绑定图片有什么缺点?
33.TitleWindow的组件是可以拖动的,我不想让他拖动我要怎么办呢?
34.你是否使用过pro file,你觉得这个工具怎么样,优,缺点是什么呢?
35.你是否做过flex 前端的性能优化,你觉得怎么做是比较完美的?
36.你是否了解E4X,请说明一下优,缺点?
37.请列举一下你知道的影响性能的几个因素?
38.请说明一下ShareObject的使用方法?以及优,缺点?
39.请列举一下,你认为不错的网站或者blog.
40.我现在给你100万做一个flex项目,你认为成功的要素在哪呢?
1.使用Flex Bulider3建立一下新的.mxml的页面时默认的背景是蓝色的,请问用什么办法能修改掉此背景颜色,以至于下次创建时背景不是为默认的蓝色的呢?请写出你认为正确的方法.
答:修改sdk/frameworks/projects/framework/default.css里Application的backgroundColor: #0000FF;
2.使用Flex Bulider3如何跟踪程序?
答:我知道的三种1.trace() 2.设置断点 3.当不在调试模式时可以调用as的Alert.show()或js的alert()如:navigateToURL(new URLRequest("javascript:alert(traceMsg)"), "_self");
3.请问enterFrame和timerEvent这2个事件有什么区别?请说下具体的使用方法和相关的使用场合?
没接触过,待学习中
4.请说下你理解AS3的事件机制是什么机制?你认为正确的就可以说出来.
答:从应用程序到最外层的容器在到容器里的组件或容器遍历注册的事件,然后按照原路返回冒泡响应事件
5.请问addEventListener里面有几个参数,你能说出具体的使用方法嘛?
答:只用过前4个,参数分别为:Event名称,响应(回调)函数, 是否冒泡时响应,Event级别
6.请问我想判断一个字体是否是数字,用什么办法去判断呢?
答:isNaN(parseInt(strPara) 或 strPara is Number
7.请问我想判断一个字符或者一个对象的类型怎么判断呢?
答:typeof(obj)
8.请问你了解 internal 控制符么?能说下具体使用方法和场合嘛?
答:同一个包里才能调用internal所定义的变量或对象
9.我想在某一点不去执行任何内容,也就是说我想停止执行了,你知道要怎么做嘛?
答:设置断点
10.请问 undefined 和 null 是否一样,如果不一样能否说出其中的区别呢?
答:undefined未定义过的变量或对象; null没有被赋值或创建的变量或对象
11.创建常量知道怎么创建嘛?说下你是怎么创建的.
答:const PI:Number = 3.1415926;
12.请问用什么方法自定义一个事件呢?说下具体的方式.
答:先用as创建一个event类, 然后
<1>可以用addEventListener直接响应
<2>也可以用元标签声明 [Event(name=事件名称,type=事件类)],然后创建对象->dispatchEvent(创建的对象)->mxml标签中使用事件名称来响应
13.请问怎么样检测本机的内容呢,比如说,我想知道本机的操作系系,是否有视频等这些.
答:flash.system.Capabilities.os 是系统类型
flash.system.Capabilities.playerType 是视频播放器类型
14.请问用什么办法解决安全域的问题?如果你不知道安全域的问题的话,可以在本机中绑定一下图片,然后再放到服务器上,就会出现此问题了.
没接触过,待学习中
15.有三种基本数字类型: number, int, 和uint 请问有什么区别.具体说一下.
答:number数字类型包含浮点型(正0负); int 整型(正0负); uint(无符号整型)
16.parseInt此方法转化为int型的方法,请问你知道此方法的第二个参数是什么意思嘛?
答:进制 2 8 16 等
17.Math.round( ), Math.floor( ) 和Math.ceil( ) 三个方法都是四舍五入,请问有什么区别?
答:都是取整:round是原数+0.5后取整(3.0->3.0+0.5=3.5->4;3.9->3.9+0.5=4.4->4);floor向下取整(3.4->3;3.9->3);ceil向上取整(1.3->2;2.8->3)
18.请问一个数组里可以放不同的类型嘛?
答:可以 var x:Array = ['a',1,new Button()];
19.var letters:Array = ["a", "b", "c"];我想在这个数组里搜索 ‘b’ 字符,请问怎么办?
答:/*1*/for(var i:* in letters)
if(letters == 'c') trace("c's position is " + i);
/*2*/if(letters.toString().indexOf('c') > 0)
trace( "c's position is " + (letters.toString().indexOf('c')- letters.length + 1) );
20.怎么样转换数组为字符串,怎么样将字符串转化为数组?
答:数组->字符串:trace(new Array('a','b','c').join("").toString());
字符串->数组: var arr:Array = new String("a,b,c").split(',');
1.使用Flex Bulider3建立一下新的.mxml的页面时默认的背景是蓝色的,请问用什么办法能修改掉此背景颜色,以至于下次创建时背景不是为默认的蓝色的呢?请写出你认为正确的方法。
答:修改sdk/frameworks/projects/framework/default.css里Application的backgroundColor: #0000FF;
2.使用Flex Bulider3如何跟踪程序?
答:我知道的三种1.trace() 2.设置断点 3.当不在调试模式时可以调用as的Alert.show()或js的alert() 如:navigateToURL(new URLRequest("javascript:alert(traceMsg)"), "_self");
3.请问enterFrame和timerEvent这2个事件有什么区别?请说下具体的使用方法和相关的使用场合?
答:enterFrame是按帧发生,timeEvent是根据设置的Timer类参数发生。如:
用ENTER_FRAME控制小球圆周运动:
addEventListener(Event.ENTER_FRAME,ballMove);
用TIMER控制小球圆周运动:
var myTimer:Timer=new Timer(83.3,0);//关于该数的设置见TIMER类的说明
myTimer.start();
myTimer.addEventListener(TimerEvent.TIMER,ballMove);
4.请说下你理解AS3的事件机制是什么机制?你认为正确的就可以说出来.
答:建立一个完整的事件机制需要四个步骤:注册侦听、分发事件、侦听事件、移除侦听。建立成功后,触发事件,事件流会进行捕获、目标和冒泡三个阶段。捕获阶段由FP沿显示列表从根容器往下层层寻找触发事件的目标对象,找到后即进入目标阶段。然后,事件对象从目标对象再次沿显示列表往上移动至根容器,遇到注册侦听的节点就调用侦听函数。如果想中途中断冒泡,可以使用stopPropagation。
5.请问addEventListener里面有几个参数,你能说出具体的使用方法嘛?
答:addEventListener(
type:String, 事件的类型
listener:Function, 监听函数
useCapture:Boolean = false, 是否打开捕获功能
priority:int = 0, 监听器优先级别
useWeakReference:Boolean = false 是否使用弱引用
)
6.请问我想判断一个字体是否是数字,用什么办法去判断呢?
答:isNaN(parseInt(strPara) 或 strPara is Number
7.请问我想判断一个字符或者一个对象的类型怎么判断呢?
答:typeof(obj)
8.请问你了解 internal 控制符么?能说下具体使用方法和场合嘛?
答:internal是默认的包内访问,体现了封装思想和package模块化思想。举例来说,A类需要使用B类和C类的方法和属性,但又不希望它们对其他类暴露,只要将A,B,C放入同一包内,包外的其他类就无法使用B,C类了。
9.我想在某一点不去执行任何内容,也就是说我想停止执行了,你知道要怎么做嘛?
答:设置断点
10.请问 undefined 和 null 是否一样,如果不一样能否说出其中的区别呢?
答:undefined是尚未初始化的无类型变量或未初始化的动态对象属性的特殊值。null是一个可以分配给变量的或由未提供数据的函数返回的特殊值。它们的相同之处在于都未初始化,不同在于undefined是无类型或动态类型的。如:
var v1;trace(v1);//undefined
var v2:*;trace(v2);//undefined
var v3:Object;trace(v3);//null
11.创建常量知道怎么创建嘛?说下你是怎么创建的.
答:const PI:Number = 3.1415926; public static const STARTUP:String = "startup";
12.请问用什么方法自定义一个事件呢?说下具体的方式.
答:(1)扩展Event类或其子类
(2)定义一个static const常量作为事件的type传入构造函数
(3)定义一个私有变量作为事件的Data保存数据,并为其添加getter和setter
(4)覆盖toString()和clone()方法
13.请问怎么样检测本机的内容呢,比如说,我想知道本机的操作系统,是否有视频等这些.
答:flash.system.Capabilities.os 当前的操作系统
flash.system.Capabilities.hasStreamingVideo系统是否可以播放视频流
14.请问用什么办法解决安全域的问题?如果你不知道安全域的问题的话,可以在本机中绑定一下图片,然后再放到服务器上,就会出现此问题了.
答:配置安全沙箱的策略文件crossdomain.xml放置到服务器根目录,如:
<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
15.有三种基本数字类型:number, int, 和uint 请问有什么区别.具体说一下.
答:number数字类型包含浮点型(正0负); int 整型(正0负); uint(无符号整型)
16.parseInt此方法转化为int型的方法,请问你知道此方法的第二个参数是什么意思嘛?
答:指定第一个参数字符串的进制,范围为2-36。例如parseInt(“100”,2)=4
17.Math.round( ), Math.floor( ) 和Math.ceil( ) 三个方法都是四舍五入,请问有什么区别?
答:round 是取最接近的整数,即原数+0.5后取整;floor向下取整;ceil向上取整
18.请问一个数组里可以放不同的类型嘛?
答:可以,如var x:Array = ['a',1,new Button()];
19.var letters:Array = ["a", "b", "c"];我想在这个数组里搜索‘c’字符,请问怎么办?
答:for(var i:* in letters)
if(letters[i] == 'c') trace("c's position is " + i);或
if(letters.toString().indexOf('c') > 0)
trace( "c's position is " + letters.toString().indexOf('c') );
20.怎么样转换数组为字符串,怎么样将字符串转化为数组?
答:数组->字符串:trace(new Array('a','b','c').join("").toString());
字符串->数组: var arr:Array = new String("a,b,c").split(',');
21.我想创建的视图居中怎么办?
答:布局策略里面限定为居中,即horizontalAlign="center" verticalAlign="middle";或者在每个控件都以舞台的中心作为相对坐标来计算各自的xy值。
22.请问知道层级的概念嘛?如果知道请问怎么样交换2个组件的层级呢?
答:层级表示的是显示对象在显示列表中的位置,从第0层开始,位于最下面。
交换组件层级可以使用id交换,也可以直接交换层级索引。如:
my_sprite.swapChildren(my_ball2, my_ball1);
my_sprite.swapChildrenAt(2, 1);
23.请问你知道loader,URLLoader,URLStream这个三种动态加载资源的具体使用场合,以及有什么区别嘛?
答:(1)Loader像2.0中MovieClip的loadMovie功能,用于加载外部的图片和SWF文件。使用 load() 方法来启动加载。被加载的显示对象将作为 Loader 对象的子级添加。在使用Loader加载数据,添加侦听事件时,一定要给Loader的contentLoaderInfo属性增加事件,而不是给Loader对象增加事件。
(2)URLLoader类以文本、二进制数据或URL编码变量值对的形式先从URL下载数据,然后才将数据用于ActionScript。它会发出有关下载进度的通知,通过bytesLoaded和bytesTotal属性以及已调度的事件,可以监视下载进度。
(3)URLStream类提供对下载URL的低级访问。数据一下载,便可随即为应用程序使用,这和使用URLLoader需要等到整个文件下载完不同。并且URLStream类还允许在完成下载前关闭流。已下载文件的内容将作为原始二进制数据提供。
(4)URLStream、URLLoader、Loader等读取外部数据的类,类里的load方法参数值是URLRequest对象。如:
var request:URLRequest=new URLRequest("httpURL地址");
loader.load(request);
24.如何把MouseEvent 的localX 和localY 属性转化成全局坐标?
答:全局坐标系:stageX,stageY。原点位于舞台左上角。
本地坐标系:localX,localY。原点位于相对组件的左上角。
内容坐标系:contentMouseX和contentMouseY。描述鼠标相对于整个容器内容的位置,用于当子组件的高或宽可能超出容器自身设置高宽的情况。
转换方法:
contentToGlobal内容到全局坐标
contentToLocal内容到本地坐标
globalToContent全局到内容坐标
globalToLocal全局到本地坐标
localToContent本地到内容坐标
localToGlobal本地到全局坐标
25.请问我现在有一个正方形的图片,我想把他做成圆形,有什么办法呢?前提是用flex或者as3
答:不清楚,是不是用BitMapData的draw方法实现呢?会的朋友请告诉我。
26.请问新创建的一个sprite能否被直接加到ui容器里?如果不能请说出用什么办法能加入.
答:不能。先将sprite加入一个扩展自UIComponent的类,再加入UI容器。
27.我怎么设置把一个文本框,设置成一个密码框?
答:将displayAsPassword属性设置为true
28.我想在文本框里只能输入abcd,有什么办法能做到呢?如果我想输入除abcd以外的其它都能输入又怎么做呢?
答:restrict=”a-d”。restrict="^(a-d)"
29.请问condenseWhite 这个属性在TextInput里是表示什么意思?
答:仅会应用于通过htmlText属性设置的文本,默认为false。当设置为true时,会删除文本中额外的换行和空白。
30.我现在刚创建的文件的text为 this is a text,我想设置光标在 is 上,请问怎么设置?
答:触发事件,在侦听函数上让selectionBeginIndex=5,selectionEndIndex=6
31.请问怎么样在文本框里添加超链接?
答:(1)使用文本框的htmlText属性添加必须以"event:"开头的超链接,如<a href='event:geturl|http://***/|_blank'>这儿</a>
(2)添加对TextEvent.LINK事件类型的侦听,如addEventListener(TextEvent.LINK,clickLink);
(3)"event:"后面的字符串将被包含在侦听事件的text属性里,如
private function clickLink(event:TextEvent):void
{
var cmdArray:Array = event.text.split("|");
if(cmdArray[0]=="geturl")
navigateToURL(new URLRequest(cmdArray[1],cmdArray[2]);
}
32.我想获取系统里的字体,请问怎么办?
答:import flash.text.Font;
var allFonts:Array = Font.enumerateFonts(true);
allFonts.sortOn("fontName", Array.CASEINSENSITIVE);
var fontsLength:int=allFonts.length;
for(var i:int=0;i<fontsLength;i++)
trace("字体名称:"+allFonts[i].fontName+"字体样式:"+allFonts[i].fontStyle+"字体类型:"+allFonts[i].fontType)
33.substring( ),substr( ), slice(),请说下3种解析字符串的不同之处,以及适用场合?
答:substring(v1,v2): 截取从v1到v2的字符串,包括v1,不包括v2
substr(v1,v2): 从v1开始,截取v2长度
slice(v1,v2):类似于substring,不过可以接受负值参数,表示倒数第几位
34. var fruits:XML =
Apple
Orange
Pear
Watermelon
;
以下有一个字符串,我现在知道了color为orange,我想知道此color相对应的name节点的值,我应该怎么做?
答:原题的XML不规范。找到name节点值可以用fruits.fruits(@color==’orange’).name
35.请说下目前使用flex和后台交互的几种方法,以及适用场合.
答:(1)基于AMF消息格式的RemoteObject组件,如Lcds/BlazeDs,AMFPHP等。
(2)基于SOAP消息格式的WebService,对于使用SOAP的服务器方便连接。
(3)基于纯文本或拥有良好格式的XML消息格式的HTTPService组件。
一般来说,选用高效稳定的RemoteObject中间件。
36.我现在想在flex里调用JS方法,我要怎么办呢?
答:直接在AS中使用ExternalInterface.call()来调用JS方法。如:
import flash.external.ExternalInterface;
ExternalInterface.call("simpleJSFunction");
ExternalInterface.call("simpleJSFunctionWithParameters","myParameter");
var result:String=ExternalInterface.call("simpleJSFunctionWithReturn");
37.我想用JavaScript调用ActionScript函数,我要怎么办呢?
答:使用ExternalInterface.addCallback在JavaScript里设置对Flex的回调方法并且在JavaScript里调用ActionScript方法。
AS:
ExternalInterface.addCallback("function1",callback1);
privatefunctioncallback1():void
{
Alert.show("callback1executed");
}
JS:
container[swf].function1();
38.FileReference 请说下此对象的几个相关事件
答:browse(typeFilter:Array = null):Boolean显示一个文件浏览对话框,让用户选择要上载的文件。
cancel():void取消正在对该 FileReference 对象执行的任何上载或下载操作。
download(request:URLRequest, defaultFileName:String = null):void打开对话框,以允许用户从远程服务器下载文件.
upload(request:URLRequest, uploadDataFieldName:String = "Filedata", testUpload:Boolean = false):void开始将用户选择的文件上载到远程服务器。
1.as2与as3的最主要区别是什么?
答:首先,as2和as3是完全不同的语言,几乎没有兼容性可言。as2编译用的AVM1虚拟机,as3用的AVM2,速度快,提供了一些基础异常处理。 as3是纯的OOP,强类型语言。as2不是。具体的差别有太多太多。
2.flex的开发框架有哪些,它们有什么优缺点?
答:最常见的当然是Cairngorm、Puremvc了,此外还有Mate,Swiz等等,据说被广泛应用的已经有10几款了。Cairngorm作为Adobe官方出品,有着贵族血统的它比较全面,是这些框架中已知bug最少的,但是基于他的应用相对臃肿复杂一些,需要对每个可以被触发的事件写一个对应的Command,编码量巨大,并且单元测试很不容易,不适合敏捷开发。Puremvc应该是现在用的最多的as框架了。比较完善、并且与Cairngorm相比,更适合中小型应用的开发,它与Cairngorm一样,也是以MVC模式为中心,并以Façade作为中央存储器的单件类的形式进行开发的。说下Mate,它是一个比较奇怪的框架,是基于标签的事件驱动型的。也就是说你不能再随意的写as类的,在使用Mate的情况下,只能用MXML来做这些事情。Swiz是Mate的孪生兄弟,长的挺像,没具体用过,不大了解。
3.在flex开发中,很多代码都写在mxml文件里,为了做到mvc模式,你是怎么处理的。
答:我认为mxml并不影响mvc模式啊。分两种情况来讨论,首先,是自己创建整个应用结构的时候,那我们可以手动将UI所在的mxml归为一类,然后由Mediator去操作或者说控制这些组件既可了,然后Mediator又统一交给Controller去操作。如果采用其他框架来进行开发的话,那就更不用来考虑这个问题了,像Cairngorm、Puremvc之类的框架已经很好的为我们解决了这些问题。只要按照它们的使用规范来进行开发,自然没有问题。
4.如果发生内存泄露,你是如何解决的?
答:在profile观察中已经内存泄漏是没有很好的解决办法的,至少我不知道,我能做的只是尽量去避免这种情况的发生,比如说注意不要循环引用,特别是在使用Timer的时候要格外注意,不要忘记全局对象上的引用的清除,在创建控制器和模型的时候要注意一定要使用单件模式。在addEventListener时候尽量采用弱引用、自引用、或者子对象引用,以避免内存泄漏。
5.as3.0垃圾回收器是如何工作的?
答:flash player 8之前采用的是引用计数法,在flash player 8 之后用的是标记法,简单的说就是:从应用的根节点开始,遍历所有其上的引用,标记每个它所发现的对象。然后迭代遍历每个被标记的对象,标记它们的子对象。这个过程递归进行,直到Player遍历了应用的整个对象树并标记了它所发现的每个东西。在这个过程进行的时候,可以安全地认为,内存中那些没有被打标记的对象没有任何活动引用,因此可以被安全地释放内存。一般来说,flash player采用的是一种低频的垃圾回收机制,Flash Player的垃圾回收发生在Flash Player需要另外请求内存之前。但并不是每次应用申请内存时都会导致垃圾回收的执行,只有当Flash占用的内存紧张到一定程度时才会执行真正的垃圾回收,一定程度上取决于客户端计算机的物理内存的大小。
6 flex和后台语言是如何交互的?
答:见第35题。
7.你是如何处理前端速度慢的问题?
答:flex前端速度慢 其实仔细说应该分2部分,1.是flex生成的swf由于SDK庞大的关系,swf体积也跟着庞大了,这我们可以做的就是用Module动态加载,还有就是RSL了。2.处理速度慢,远程方法速度慢,这是AVM的硬伤了,基本没有很好的解决方法,我们能做的只是让这个异步进行的更完美一些,让用户在等待的过程中,做其他的事情,以至于让用户忽略这段等待的时间。
8.flash与flex是如何协调开发的?
答:这个问题可以这样来理解,如果是确实需要用到FLEX SDK的应用,那我们就可以建立一个flex工程,具体需要flash做UI的时候,输出成swc作为flex的skin,如果说并不需要flex sdk,只是为了编码方便而选择flex的话,那我们只要建立一个as工程,让flex作为flash的编码器。
组件
1.我不想在容器里显示滚动条怎么办?
答:指定horizontalScrollPolicy和verticalScrollPolicy为off
2.请问Flex bulider3可以创建几种不同的项目?
答:三种。Flex Project、 AS Project 和Flex Library Project。
3.你了解RSL嘛?请说明下RSL的使用方法,以及使用RSL为了解决什么问题?
答:RSL(Runtime shared libraries)即动态链接库,在程序运行时由FlashPlayer动态加载。静态链接库是SWC文件,通过编译器的library-path和include-libraries编译进应用程序。采用静态链接的应用程序SWF会产生比较大的文件以及更长的下载时间。使用RSL的应用程序载入时间短且文件比较小,而且提高了内存使用效率,只是在开始需要花点时间下载RSL。RSL的强大体现在多个应用程序共享公共代码时,因为RSL只需要被下载一次,多个应用程序动态链接到相同的RSL,访问其中已经缓存在客户端的资源。
使用RSL:
(1).在项目文件夹中点右建,选择"properties"-"Flex Build Path"-"Library Path"
(2).该选项卡上我们看到"FrameWork linkage",默认是"Merged into cdoe"(FLEX4默认是RSL)
(3).点开下拉,选择"runtime shared library(RSL)"
(4).针对自定义的SWC,修改其link type为RSL,选择None,同时勾上Automatically extract swf to deployment path(自动将SWF提取到部署路径)。如果想对不同域的RSL共享,则选择Digests(摘要),同时指定其Policy file url(策略文件)。具体可参考FLEX SDK中的SWC文件处理方式。
(5).点击OK
4.请问SWC是做什么用的,怎么样自己制作一个SWC?
答:静态链接库是SWC文件,通过编译器的library-path和include-libraries编译进应用程序。
新建Flex Library Object或使用compc命令可以制作SWC。
5.flex生成出来的文件都是很大,请问你用什么办法进行缩小呢?
答:(1)RSL
(2)Module
(3)外部加载资源
6.请问trace( NaN == NaN ) 结果为true 还是false,为什么?
答:NaN 具有独特的数学性质,任何与其相关的比较都会得到false的计算结果。改用全局 isNaN()函数检测NaN值,如下所示:
trace(NaN == NaN); // false!
trace(NaN != NaN); // false again!
trace(isNaN(NaN)); // true
7.warning: unable to bind to property ” on class ‘Object’ (class is not an IEventDispatcher) 在使用ItemRender时,经常会出现这种警告,请问想去除的话怎么办呢?
答:ArrayCollection的子元素是无法作为数据源绑定的。可以声明中间变量,在override set data时将ArrayCollection的子元素传入,然后再将中间变量作为新的绑定源即可。
8.现在流行MVC,但是as代码有的时候还是大部分写在mxml里面,请问我想代码分离怎么办呢?
答:严格按照MVC框架规范书写代码。如果还是不行,可以考虑重写组件或者从业务逻辑上解耦。没必要用source引用外部as文件来达到代码分离,那没有意义。
9.我想继承UIComponent重新写一个正方形的组件,我应该怎么做?请说重点部分即可.
答:(1)使用get、set初始化组件边长等必要数据,指定能通过MXML标记设置的属性。
(2)如果组件内有子元素,覆盖createChildren()方法,使用addChild加入这些子元素。
(3)覆盖commitProperties()方法,提交边长等组件属性变化。
(4)覆盖measure()方法,设置组件缺省size和缺省最小size。
(5)覆盖updateDisplayList()方法,依据布局确定子元素大小及位置。最后,使用graphics类的drawRect方法画出正方形边框。
10.常用的几个切换数据的组件比如: TabNavigator等都有属性 creationPolicy 你知道这种策略的使用方式是什么嘛?以及优,缺点呢?
答:延迟实例化。优点是可以更快地加载组件,缺点是首次访问其他组件时,由于需要重新加载此组件,可能会有一定的延迟。
11.我想在application里获取当前运行的URL,我要怎么获取.
答:Application.application.url
12.请说下事件里的currentTarget 和 target的区别?
答:在事件流的过程中,目标阶段确定的目标对象由Event中的target属性来记录,冒泡阶段移动的游标则由currentTarget来记录。事件对象冒泡过程中每往上移动一级,就会克隆出一个仅与前副本currentTarget不同的新副本。
13.请列举下你常用的几种effects,并说明使用原因.
答:SoundEffect,为了播放MP3
TweenLite很多特效
14.HBox,VBox和canvas有什么区别呢?试说出其中几点
答:canvas只有绝对布局,没有布局管理器。
HBox,VBox则相反,没有绝对布局,只有相对布局。
15.请问我想在list里选中多行信息,我要怎么做呢?
答:设置allowMultipleSelection为true
16.Alert里面有几个属性,我想设置图片怎么办呢?
答:使用iconClass属性指定图片
17.请问你是否设置过样式呢,我想动态设置样式怎么办呢?如果我想在as代码里设置样式我又要怎么办呢?
答:使用setStyle()
18.你能说一下UIComponent的生命周期嘛?以及相关的使用场合呢?
答:(1)调用组件构造函数
(2)设置组件属性
(3)调用addChild()将组件添加到父组件显示列表
(4)组件的parent属性设置为对父容器的引用
(5)设置样式
(6)组件分发preinitialize事件
(7)调用组件createChildren()
(8)调用 invalidateProperties(),invalidateSize(),invalidateDisplayList()失效方法,FLEX将在下一个“渲染事件”(render event)期间对相应的commitProperties(),measure(), updateDisplayList()方法进行调用。这个规则唯一例外就是当用户设置组件的height 和width 属性时, Flex 不会调用measure()方法。也就是说,只有当组件的explicitWidth 和explicitHeight 属性是NaN 时Flex才会调用measure()方法。
(9)组件分发initialize事件。此时组件所有的子组件初始化完成,但组件尚未更改size和布局,可以利用这个事件在组件布局之前执行一些附加的处理
(10)在父容器上分发childAdd事件
(11)在父容器上分发initialize事件
(12)在下一个“渲染事件”(render event)中, Flex 执行以下动作:
a.调用组件的commitProperties()方法
b.调用组件的measure()方法
c.调用组件的layoutChrome()方法
d.调用组件的updateDisplayList()方法
e.在组件上分发updateComplete事件
(13)如果commitProperties(), measure(),updateDisplayList()方法调用了invalidateProperties(),invalidateSize(),invalidateDisplayList()方法,则Flexh 会分发另外一个render事件
(14)在最后的render事件发生后, Flex执行以下动作:
a.设置组件visible属性使其可视
b.组件分发creationComplete事件,组件的大小(size)和布局被确定,这个事件只在组件创建时分发一次
c.组件分发updateComplete事件。无论什么时候,只要组件的布局(layout),位置,大小或其它可视的属性发生变化就会分发这事件,然后更新组件来正确地显示。
19.请问你是否发现过 flex3里的bug呢,请列举一些?
答:flex Module内存泄露,对象无法释放。
--->点击阅读更多