存档于 'flex cookbook'
6.4过滤DataGrid数据项
发表时间:18. Dec, 2009 作者:Freddie.
主要功能: 对dataprovider里面的data进行过滤~
代码:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” applicationComplete=”oninit()”>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var items:ArrayCollection;
private function oninit():void{
this.srv.send();
}
private function onResult(event:ResultEvent):void{
this.items=event.result.item;
}
private function applyFilter():void{
if (this.items.filterFunction == null)
{
this.items.filterFunction=this.filterNames;
}
this.items.refresh();
}
private function filterNames(item:Object):Boolean{
var match:Boolean = true;
if(nameFilter.text!=””){
var name:String = item["name"];
var filter:String =nameFilter.text;
if(!name||name.toLowerCase().indexOf(filter.toLowerCase())<0){
[...]
详细内容
3.22在容器中滚动到某个指定的子组件
发表时间:18. Dec, 2009 作者:Freddie.
code:
<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml”
width=”800″
height=”600″>
<mx:Script>
<![CDATA[
private function showScrollValue():void
{
trace(this.verticalScrollPosition + " " + this.horizontalScrollPosition);
}
private function changeScrollToShowChild():void
{
vbox.verticalScrollPosition=(returnChildrenHeights((comboBox.selectedItem as Number)-1));
}
//Vbox 内所有子组件的高度用以计算并确定一个y 值来设定verticalScrollPosition 属性,从而使Vbox 滚动到指定的子组件的位置。
private function returnChildrenHeights(index:int):Number
{
var i:int=0;
var sumHeight:Number=0;
while (i < index)
{
sumHeight+=vbox.getChildAt(i).height;
i++;
}
return sumHeight;
}
]]>
</mx:Script>
<mx:ComboBox id=”comboBox”
change=”changeScrollToShowChild()”>
<mx:dataProvider>
<mx:Array>
[...]
详细内容
3.15使用延迟实例化提高启动效率
发表时间:18. Dec, 2009 作者:Freddie.
问题
我们要保证组件仅仅在需要显示在屏幕上的时候才被创建。
Container 类默认情况下仅仅在要显示组件的时候创建它,因为UIComponent 默认的
creationPolicy 值为auto。换句话说,当视图(view)设置成可视的时候,如果还没有创建
该视图,则组件会实例化此视图
code:
<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml”
height=”600″
width=”600″>
<mx:Script>
<![CDATA[
private function changeViewStackCreation():void
{
viewStack.creationPolicy=(comboBox.selectedItem as String);
viewStack.createComponentsFromDescriptors(true);
}
private function changeViewStack():void
{
viewStack.selectedIndex=comboBoxChangeIndex.selectedIndex;
}
]]>
</mx:Script>
<mx:Fade alphaFrom=”0″
alphaTo=”1″
duration=”4000″
id=”fadeIn”/>
<mx:ComboBox dataProvider=”{['none', 'all', 'queued',
'auto']}”
change=”changeViewStackCreation()”
id=”comboBox”/>
<mx:ComboBox dataProvider=”{[1, 2, 3, 4]}”
x=”150″
change=”changeViewStack()”
id=”comboBoxChangeIndex”/>
<mx:ViewStack id=”viewStack”
width=”400″
height=”300″
creationPolicy=”none”
y=”100″>
<mx:Canvas creationCompleteEffect=”{fadeIn}”
creationIndex=”0″
backgroundColor=”#0000ff”
[...]
详细内容
3.13 通过LinkBar 控制ViewStack
发表时间:18. Dec, 2009 作者:Freddie.
使用LinkBar 的selectedIndex 或selectedItem 属性的任意之一可以决定显示ViewStack
的哪一条。
code:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute”>
<mx:Script>
<![CDATA[
[Bindable]
private var indext:int =0;
private function changeIndex():void{
if(indext==2){
indext=0;
}else{
indext++;
}
}
]]>
</mx:Script>
<mx:Canvas click=”changeIndex()”>
<mx:ViewStack selectedIndex=”{indext}”>
<mx:VBox>
<mx:Image source=”BFC069.gif”/>
</mx:VBox>
<mx:VBox>
<mx:Image source=”BFC204.gif”/>
</mx:VBox>
<mx:VBox>
<mx:Image source=”FC229I.gif”/>
</mx:VBox>
</mx:ViewStack>
</mx:Canvas>
</mx:Application>
注:viewstack里必须为容器,我们这里用了vbox~
这里可以实现相册浏览的效果(当然是最简易的拉~~)
详细内容
2.6设置控件的labelFunction
发表时间:18. Dec, 2009 作者:Freddie.
很多时候我们需要combobox里面的标签是一个组合,而不单单只是一个LABEL,怎么解决呢,看代码:
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”
layout=”horizontal”>
<mx:ComboBox dataProvider=”{myDP}”
labelFunction=”getFullName”/>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var myDP:ArrayCollection=new ArrayCollection([{id: 1, fName: "Lucky", lName: "Luke"}, {id: 2, fName: "Bart", lName: "Simpson"}]);
private function getFullName(item:Object):String
{
return item.fName + ” ” + item.lName;
}
]]>
</mx:Script>
</mx:Application>
combobox为我们提供了 labelFunction这个功能 ,你可以自定义自己所需要的信息作为标签~
详细内容
1.15监听键盘事件
发表时间:18. Dec, 2009 作者:Freddie.
解决思路:
为应用程序的stage或组件的keyDown事件添加监听器,读取KeyboardEvents的keyCode属性。
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”
layout=”absolute”
KeyDown=”KeyHandler(event)”
xmlns:ns1=”*”>
<mx:Script>
<![CDATA[
import flash.events.KeyboardEvent;
private function keyHandler(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case 13:
trace("Enter pressed");
break;
case 32:
trace("SpaceBar");
break;
case 16:
trace("ShiftKeypressed");
break;
case 112:
trace("F1pressed");
break;
case 8:
trace("Deletepressed");
break;
}
}
]]>
</mx:Script>
<mx:Button />
</mx:Application>
运行,没反应??? 注意下面放了一个BUTTON,cookbook解释说它必须被激活才能监听到它发出来的事件,
也就是说必须得先按一下,麻烦吧~ 不过,还有简单点的办法。
把上面的KeyDown监听换成下面这一句
addedToStage=”stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler)”
也就是给舞台一个一事件监听,这下就不用激活BUTTON拉··

