1. 读取从swf传进来的参数
var first_name : String = FlexGlobals.topLevelApplication.parameters.firstname;
2. FXG使用fill对图形本体进行上色,使用stroke对图形边框进行上色,而fill(填充)和stroke(画笔)有三种上色方法:
fill — SolidColor(色块),RadialGradient(径向渐变),LinearGradient(线性渐变)。
stroke — SolidColorStroke(实线),RadialGradientStroke(径向渐变),LinearGradientStroke(线性渐变)。
3. leverage remove events to enable component clean-up when a component is removed,two events are dispatch:the parent dispatches ElementExistance.ELEMENT_REMOVED and the component dispatches FlexEvent.REMOVED
4. //关掉滚动控件的垂直和水平滚动条(list控件)
list.scroller.setStyle('horizontalScrollPolicy', 'off');
list.scroller.setStyle('verticalScrollPolicy', 'off');
//设置滚动控件的垂直滚动条的滚动样式
list.scroller.verticalScrollBar.setStyle('smoothScrolling', true);//设置为平滑滚动
list.scroller.verticalScrollBar.setStyle('repeatInterval', 500);//设置滚动到指定点的经过的时间
5. 对象的深度克隆
public static function clone(object:Object):Object{
var qClassName:String = getQualifiedClassName(object);
var objectType:Class = getDefinitionByName(qClassName) as Class;
registerClassAlias(qClassName, objectType);//恢复本来面目
var copier : ByteArray = new ByteArray();
copier.writeObject(object);
copier.position = 0;
return copier.readObject();
}
6.replaceAll 方法
private function replaceAll( source:String, find:String, replacement:String ):String{
return source.split( find ).join( replacement );
}
7.layout http://insideria.com/2009/05/flex-4-custom-layouts.html
package
{
import mx.core.ILayoutElement;
import spark.layouts.supportClasses.LayoutBase;
public class CircularLayout extends LayoutBase
{
override public function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
if (!target)
return;
var layoutElement:ILayoutElement;
var count:uint = target.numElements;
var angle : Number = 360/count;
var radius : Number = Math.min( target.width/2, target.height/2 ) - 25;
var w2 : Number = target.width/2;
var h2 : Number = target.height/2;
for (var i:int = 0; i < count; i++)
{
layoutElement = target.getElementAt(i);
if (!layoutElement || !layoutElement.includeInLayout)
continue;
var radAngle : Number = (angle * i) * (Math.PI / 180) ;
var _x : Number = Math.sin( radAngle );
var _y : Number = - Math.cos( radAngle );
layoutElement.setLayoutBoundsPosition( w2 + (_x * radius) - 25, h2 + (_y * radius) - 10 );
}
}
}
}
8. save as a image
//AS部分代码
var bitmapData:BitmapData = new BitmapData(pic.width, pic.height);
bitmapData.draw(pic,new Matrix());
var bitmap : Bitmap = new Bitmap(bitmapData);
var jpg:JPEGEncoder = new JPEGEncoder();
var ba:ByteArray = jpg.encode(bitmapData);
file.save(ba,"a.jpg");
//MXML部分代码
<mx:Canvas id="pic">
<mx:Image source="@Embed('hello.jpg')"/>
<mx:Label y="43" fontSize="48" id="myMessageLbl" horizontalCenter="0" width="100%" textAlign="center"/>
</mx:Canvas>
9. 把visable和includeInLayout组合起来使用,这样可以让组件显示的时候就占位,不显示的时候就把位置让给人家。
10. java端的java.math.BigDecimal via AMF 3 pass to actionscript 将被序列化成string
11.DataGrid列排序不确定的情况下,可以这么做(闭包):
private static function sortFunc(field:String):Function{
return function(obj1:Object, obj2:Object):int{
return ObjectUtil.numericCompare(obj1[field],obj2[field]);
}
}
12.播放一组动画
<s:transitions>
<s:Transition fromState="closed" toState="open">
<s:Sequence>
<s:Resize target="{this}" duration="150" />
<s:AddAction target="{contentGroup}" />
<s:Fade target="{contentGroup}" alphaFrom="0" alphaTo="1" duration="150"/>
</s:Sequence>
</s:Transition>
<s:Transition fromState="open" toState="closed">
<s:Sequence>
<s:Fade target="{contentGroup}" alphaFrom="1" alphaTo="0" duration="150" />
<s:RemoveAction target="{contentGroup}" />
<s:Resize target="{this}" duration="150" />
</s:Sequence>
</s:Transition>
</s:transitions>
13.event.target是事件的派发者,event.currentTarget是事件的监听者
14.动态生成DataGrid组件的表头。
private function setCols():void {
var cols:Array = dg.columns;
for(var i:uint=0;i<dbField.length;i++){
var dgCol:DataGridColumn = new DataGridColumn();
dg.width+=50
dgCol.dataField = dbField[i];
dgCol.headerText =dbField[i];
cols.push(dgCol);
}
dg.columns = cols;
}
15.默认情况DataGrid组件的DataGridColumn的dataField属性不支持形如a.b.c的嵌套数据,但是可以给DataGridColumn指定labelFunction来达到目的。
private function neast_labelFunc(row:Object, col:DataGridColumn):String {
var fields:Array;
var label:String;
var dataFieldSplit:String = col.dataField;
var currentData:Object = row;
if(dataFieldSplit.indexOf(".") != -1){
fields = dataFieldSplit.split(".");
for each(var f:String in fields)
currentData = currentData[f];
if(currentData is String)
return String(currentData);
}else{
if(dataFieldSplit != "")
currentData = currentData[dataFieldSplit];
}
try{
label = currentData.toString();
}catch(e:Error){
label = super.itemToLabel(row);
}
return label;
}
16.当我们侦听itemClick事件的时候,将会接收到一个ListEvent事件对象,对象里分别有所点击单元格的列索引与列索 引, 我们就从这两个数据进行其它数据的获取... (ps:下边提到的e为ListEvent事件对象..)
1.所点击的列的表头
(e.target as DataGrid).columns[e.columnIndex].headerText
2.点击的列索引
e.columnIndex
3.点击的行索引
e.rowIndex
4.点击的整行的数据(选中的数据)
(e.target as DataGrid).selectedItem
5.选中的单元格的数据
(e.target as DataGrid).selectedItem[(e.target as DataGrid).columns[e.columnIndex].dataField]
17.ActionScript调用JavaScript函数
ExternalInterface.call("parent.页面js函数名","参数");
18.从itemrender发送事件给list
owner.dispatchEvent(事件对象);
19.Flash 应用的右键菜单
private function initContextMenu():void{
const copyMenu:ContextMenuItem = new ContextMenuItem("Copy Text", true);
copyMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, copyText);
contextMenu = new flash.ui.ContextMenu();
contextMenu.hideBuiltInItems();
contextMenu.customItems = [copyMenu];
}
private function copyText(event:ContextMenuEvent):void{
Clipboard.generalClipboard.setData(ClipboardFormats.TEXT_FORMAT, text);
}
20 . Flex中label换行
在as中赋值 label.text="aaaaa \r\n bbbbbbb"
在mxml中赋值 text="aaaaaa bbbbbbb"
21. parsley 日志能功
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:TraceTarget
includeCategory="true"
includeLevel="true"
includeTime="true"
level="{LogEventLevel.DEBUG}"
>
<s:filters>
<fx:String>org.spicefactory.parsley.*</fx:String>
</s:filters>
</s:TraceTarget>
<sf:ContextBuilder config="{ConfigFile}"></sf:ContextBuilder>
</fx:Declarations>
22. Flex4:ViewStack与浏览器历史记录(HistoryManager和BrowserManager(flex4推荐))
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" >
<fx:Script>
<![CDATA[
public var historyManagementEnabled : Boolean = true;//flex4要加上这句
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout horizontalAlign="center"/>
</s:layout>
<s:TabBar dataProvider="{stack}"/>
<mx:ViewStack historyManagementEnabled="true" id="stack" height="100%" width="100%">
<s:NavigatorContent label="First page">
<s:HGroup horizontalAlign="center" verticalAlign="middle" height="100%" width="100%">
<s:Label text="This is the first page" verticalAlign="middle"/>
</s:HGroup>
</s:NavigatorContent>
<s:NavigatorContent label="Second page">
<s:HGroup horizontalAlign="center" verticalAlign="middle" height="100%" width="100%">
<s:Label text="This is the second page"/>
</s:HGroup>
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>