技术开发 频道

Flex及AS3的百多条小知识

【提取子字符串】
String.substr(startIndex:Number = 0, len:Number = 0x7fffffff):String
String.substring(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String
String.slice(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String
substr()第一个参数可以是负值,表示索引值是从字符串尾端算过来,-1是最后一个字符;
substring()和slice()差别在于substring()只接受正索引值,而把负值作为0处理.另外,如果endIndex小于startIndex,substring()方法在执行前,会自动将其调换过来,总是使用两个参数中较小的值作为起始索引.
slice()方法可接受startIndex和endIndex为负值,而把负值表示为从字符串的尾端算回来,如果endIndex小于startIndex,slice()方法会返回空字符串.
【以指定模式拆分字符串】
String.split(delimiter:*, limit:Number = 0x7fffffff):Array
【替换指定的字符串】
使用String.replace(pattern:*, repl:Object):String
可以这样来替换所有指定的字符串: myString.split("a").join("b");
【按单词或单个字母逆转字符串】
1. 把字符串切割使用String.split()方法成一个数组:对单词而言,以空格作为分界符,对字母而言,以空字符("")作为分界符;
2. 使用Array.reverse()方法对数组进行逆转;
3. 使用Array.join()方法重新组合为字符串:对单词而言,以空格(" ")作为联结符,对字母而言,以空字符("")作为联结符;
【使用SharedObject及捕获异常】
var so:SharedObject = SharedObject.getLocal("so");
so.data.userName = "Youthoy";
try {
var flushResult:String = so.flush(500 * 1024); //请求500KB容量
//如果flush()没成功执行,就替netStatus加个事件处理函数以确认用户是同意还是拒绝,否则只检验结果.
if(flushResult == SharedObjectFlushStatus.PENDING) {
//替netStatus加个事件处理函数,使得我们可以检验用户是否同意以足够磁盘容量储存共享对象.当netStatus事件发生时,执行onStatus函数.
so.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
}else if(flushResult == SharedObjectFlushStatus.FLUSHED) {
//成功储存.把数据成功储存后你想执行的程序放在这里.
}
}catch(e:Error) {
//这里表示用户把本地储存设置为"拒绝".如果储存数据很重要,你会想在此警告用户.
//此外,如果你想让用户可修改其设定值,可以用下面语句打开Player的"设置"对话框的本地储存页面.
Security.showSettings(SecurityPanel.LOCAL_STORAGE);
}
//定义onStatus函数以处理共享对象的状态事件.flush()返回"pending"时,引发提示,而用户做了选择后所引发的事件.
function onStatus(event:NetStatusEvent):void {
if(event.info.code == "SharedObject.Flush.Success"){
//如果event.info.code内容是"SharedObject.Flush.Success",表示用户同意.把用户同意后你想执行的程序放在这里.
}else if(event.info.code == "SharedObject.Flush.Failed"){
//如果event.info.code内容是"SharedObject.Flush.Failed",表示用户同意.把用户拒绝后你想执行的程序放在这里.
}
//现在,移除事件监听器,因为我们只需监听一次.
so.removeEventListener(NetStatusEvent.NET_STATUS, onStatus);
}
【向LSO储存对象时需要注意】
LSO使用二进制的AMF(Action Message Format)对一个对象进行编码.当你在LSO储存类对象时,该对象会编码成包含内容属性的普通对象.于是,当你试着从共享对象里读取该对象时,无法被 读成某类的对象,因为没有类型数据.要克服这个限制,使用flash.net.registerClassAlias()方法.
任何影片中,只要从共享对象读取出自定义对象数据,自定义类就必须注册别名,而且调用registerClassAlias()方法时必须在SharedObject.getLocal()方法被调用之前.
【要相同域名内的两个影片可以存取相同LSO】
首先LSO是储存在以下目录下:
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects
例如,如果来自于http://www.riahome.cn/youthoy的影片movie.swf写入名为example的LSO,则数据会储存在以下位置:
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects\[random directory name]\riahome.cn\youthoy\movie.swf\example.sol
如果在这个movie.swf里的代码是这样的: var example:SharedObject = SharedObject.getLocal("example", "/"); 也就是使用了选用的本地路径参数,则LSO会储存在以下路径,注意到与以上路径少了"youthoy\movie.swf":
C:\Documents and Settings\[user name]\Application Data\Macromedia\Flash Player\#SharedObjects\[random directory name]\riahome.cn\example.sol
以此方法建立的LSO,可以由相同域的其它Flash影片用以下程序来读取:
var example:SharedObject = SharedObject.getLocal("example", "/");
再看一个例子:
有两个Flash影片movieOne.swf和movieTwo.swf都位于同一域(http://www.riahome.cn)内,但是, movieOne.swf位于http://www.riahome.cn/youthoy/firstGroup,而movieTwo.swf位于 http://www.riahome.cn/youthoy/secondGroup.在这情况里,movieOne.swf可以用下列任何本地路径建 立和读取LSO:
/
/youthoy
/youthoy/firstGroup
而movieTwo.swf可以用下列任何本地路径建立和读取LSO:
/
/youthoy
/youthoy/secondGroup
因此,如果你想要两个影片都可以读取相同LSO,当你调用getLocal()方法时,必须指定影片共享的两个本地路径之一(/或/youthoy).
【URLLoader.dataFormat的三种类型】
URLLoader.dataFormat的可选值是:
flash.net.URLLoaderDataFormat.BINARY
flash.net.URLLoaderDataFormat.TEXT
flash.net.URLLoaderDataFormat.VARIABLES
当dataFormat是BINARY时,URLLoader.data属性就是flash.utils.ByteArray类型;
当dataFormat是TEXT时,URLLoader.data属性就是String类型;
当dataFormat是VARIABLES时,uRLLoader.data属性就是Object类型.
【在XML内使用动态数据】
把变量放在大括号({和})内:
var userName:String = "Youthoy";
var myXML:XML = <person><userName>{userName}</userName></person>;
【新增一个节点元素】
//例子一:
var example:XML = <person/>;
example.father = <father/>; //内容属性和元素名称不一定要相同,也可以: example.abc = <father/>,但会以元素名称为准,即会建立一个<father/>元素
trace(example);
/*
输出:
<person>
<father/>
</person>
*/
//例子二:
var example:XML = <person/>;
example.father = ""; //建立一个<father/>元素
trace(example.toString());
/*
输出:
<person>
<father/>
</person>
*/
//例子三:
var example:XML = <person/>;
var id:int = 10;
example["user" + id] = "";
trace(example);
/*
输出:
<person>
<user10/>
</person>
注意: 有些情况必须使用第三种情况.例如,元素节点名称内含连字符("-")是完全合法的,但在ActionScript里会得到编译器错误:
example.some-element = ""; //产生编译器错误
正确的写法是:
example["some-element"] = "";
*/
 

0
相关文章