标签存档: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”
[...]
详细内容
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拉··
详细内容
flex cookbook学习—1.11使用事件冒泡机制
发表时间:18. Dec, 2009 作者:Freddie.
我们需要通过几个类来了解冒泡事件,很多类型的事件都可以冒泡:mouse-down事件,click
事件,keyboard 事件。术语“向上冒泡”指的是事件通过其自身的处理方式从显示列表传递
到应用程序容器,这就像水里的气泡上升到水面那样。当用户点击任何组件时,其事件就会
通过层级向上传递,也就意味着父组件也能监听到click事件,无论哪个子组件发出事件,父
组件都能收到。要想父组件监听所有子组件发出的某一类型的事件,父组件只需添加一个事
件监听器即可收到子组件传递过来的事件。
BubbleComponent:
<mx:HBox xmlns:mx=”http://www.adobe.com/2006/mxml” width=”400″ height=”300″>
<mx:Script>
<![CDATA[
private function sendClick():void{
trace("BubbleComponent::Click");
}
]]>
</mx:Script>
<mx:Button click=”sendClick()”/>
</mx:HBox>
BubbleHolder:
<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml”
width=”400″ height=”300″ xmlns:ns1=”*”>
<mx:Script>
<![CDATA[
private function handleClick():void{
trace("BubbleHolder::click");
}
]]>
</mx:Script>
<ns1:BubbleComponent x=”0″ y=”0″ click=”handleClick()”>
</ns1:BubbleComponent>
</mx:Canvas>
BubbleTest(主程序,MXML application)
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” xmlns:ns1=”*”>
<mx:Script>
<![CDATA[
private function handleClick():void{
trace("main prog");
}
]]>
</mx:Script>
<ns1:BubbleHolder x=”10″ y=”10″ click=”handleClick()”>
</ns1:BubbleHolder>
</mx:Application>
BubbleComponent.mxml中的click事件将被广播一直传到应用程序层。
MouseEvent类中的事件序列发出关于此事件的信息,比如click事件和click时鼠标的位置,通
过显示列表到达所有的子节点,接着子节点接收此事件,然后从显示列表返回到Stage。
Stage 检测MouseEvent 并传递它到显示列表,直到找到此事件的目标,这就是用户与之交互
的目标组件,这被称之为捕获阶段。接着,事件目标对象的事件处理函数被调用,这称之为
目标阶段,最后,冒泡阶段触发,发送事件返回给显示列表给其他监听器,所有方式重新回
到Stage [...]

