itemrenderer与父器皿之间的交互,调用
itemrenderer与父容器之间的交互,调用
转自他文,并做适当删除修改!
在项目渲染器访问主调用应用中的成员,可用parentDocument来引用;
主调用应用要访问项目渲染器中的成员,一般都是通过在项目渲染器先派发事件,然后在主调用应用中注册事件侦听器来实现。
例如:在项目渲染器中点击图片事件,然后通知主调用应用
<mx:Image click="this.parentDocument.imgclick(event)"
data="{data.label}" source="assets\tx.JPG" width="40"/>
在主调用应用中定义:
public function imgclick(evt:MouseEvent):void
{
var img:Image=evt.currentTarget as Image;
Alert.show(img.data.toString());
}
记住得是public的,不同类之间是无法访问私有方法的
其实上面的功能也可以用dispatchEvent来实现
先定义一个事件类
package
{
import flash.events.Event;
public class myEvent extends Event
{
public var data:String;
public function myEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false,data:String="")
{
super(type, bubbles, cancelable);
this.data=data;
}
}
}
然后在itemh中将事件调度到事件流中
<mx:Image click="clickHandler(event)"
data="{data.label}" source="assets\tx.JPG" width="40"/>
private function clickHandler(evt:MouseEvent):void
{
var img:Image=evt.currentTarget as Image;
dispatchEvent(new myEvent("img_click",true,true,img.data.toString()));
}
最后在主调应用中监听事件
private function initTileList():void
{
this.tlist.addEventListener("img_click",onItemimg_click);
}
private function onItemimg_click(evt:myEvent):void
{
Alert.show(evt.data);
}
<mx:TileList id="tlist" maxColumns="1" x="34" y="10" width="148"
dataProvider="{arrColl_keySetup}" itemRenderer="itemh"
creationComplete="initTileList()">
</mx:TileList>
其实也可以用<mx:itemRenderer>和<mx:Component>标签来声明itemRenderer
例如以上代码可以改为:
<mx:Script>
<![CDATA[
import mx.controls.Image;
import mx.controls.Alert;
public function imgclick(evt:MouseEvent):void
{
var img:Image=evt.currentTarget as Image;
Alert.show(img.data.toString());
}
]]>
</mx:Script>
<mx:ArrayCollection id="arrColl_keySetup">
<mx:source>
<mx:Array id="arr_keysetup">
<mx:Object data="00" sel="false" label="aaa"/>
<mx:Object data="11" sel="false" label="bbb"/>
<mx:Object data="22" sel="true" label="ccc"/>
</mx:Array>
</mx:source>
</mx:ArrayCollection>
<mx:TileList id="tlist" maxColumns="1"
dataProvider="{arrColl_keySetup}"
x="34" y="10" width="148">
<mx:itemRenderer>
<mx:Component>
<mx:HBox width="145" height="41" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:VBox width="40" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Image click="this.parentDocument.imgclick(event)"
data="{data.label}" buttonMode="true" source="assets\tx.JPG" width="40"/>
</mx:VBox>
<mx:VBox width="95" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Label text="{data.label}" toolTip="{data.label}"/>
<mx:Image toolTip="点我查看视频" buttonMode="true"
source="assets\camera.JPG" width="16" height="20"/>
</mx:VBox>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
本文来自****博客,转载请标明出处:http://blog.****.net/dream8062/archive/2009/02/27/3941087.aspx
转自他文,并做适当删除修改!
在项目渲染器访问主调用应用中的成员,可用parentDocument来引用;
主调用应用要访问项目渲染器中的成员,一般都是通过在项目渲染器先派发事件,然后在主调用应用中注册事件侦听器来实现。
例如:在项目渲染器中点击图片事件,然后通知主调用应用
<mx:Image click="this.parentDocument.imgclick(event)"
data="{data.label}" source="assets\tx.JPG" width="40"/>
在主调用应用中定义:
public function imgclick(evt:MouseEvent):void
{
var img:Image=evt.currentTarget as Image;
Alert.show(img.data.toString());
}
记住得是public的,不同类之间是无法访问私有方法的
其实上面的功能也可以用dispatchEvent来实现
先定义一个事件类
package
{
import flash.events.Event;
public class myEvent extends Event
{
public var data:String;
public function myEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false,data:String="")
{
super(type, bubbles, cancelable);
this.data=data;
}
}
}
然后在itemh中将事件调度到事件流中
<mx:Image click="clickHandler(event)"
data="{data.label}" source="assets\tx.JPG" width="40"/>
private function clickHandler(evt:MouseEvent):void
{
var img:Image=evt.currentTarget as Image;
dispatchEvent(new myEvent("img_click",true,true,img.data.toString()));
}
最后在主调应用中监听事件
private function initTileList():void
{
this.tlist.addEventListener("img_click",onItemimg_click);
}
private function onItemimg_click(evt:myEvent):void
{
Alert.show(evt.data);
}
<mx:TileList id="tlist" maxColumns="1" x="34" y="10" width="148"
dataProvider="{arrColl_keySetup}" itemRenderer="itemh"
creationComplete="initTileList()">
</mx:TileList>
其实也可以用<mx:itemRenderer>和<mx:Component>标签来声明itemRenderer
例如以上代码可以改为:
<mx:Script>
<![CDATA[
import mx.controls.Image;
import mx.controls.Alert;
public function imgclick(evt:MouseEvent):void
{
var img:Image=evt.currentTarget as Image;
Alert.show(img.data.toString());
}
]]>
</mx:Script>
<mx:ArrayCollection id="arrColl_keySetup">
<mx:source>
<mx:Array id="arr_keysetup">
<mx:Object data="00" sel="false" label="aaa"/>
<mx:Object data="11" sel="false" label="bbb"/>
<mx:Object data="22" sel="true" label="ccc"/>
</mx:Array>
</mx:source>
</mx:ArrayCollection>
<mx:TileList id="tlist" maxColumns="1"
dataProvider="{arrColl_keySetup}"
x="34" y="10" width="148">
<mx:itemRenderer>
<mx:Component>
<mx:HBox width="145" height="41" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:VBox width="40" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Image click="this.parentDocument.imgclick(event)"
data="{data.label}" buttonMode="true" source="assets\tx.JPG" width="40"/>
</mx:VBox>
<mx:VBox width="95" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Label text="{data.label}" toolTip="{data.label}"/>
<mx:Image toolTip="点我查看视频" buttonMode="true"
source="assets\camera.JPG" width="16" height="20"/>
</mx:VBox>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
本文来自****博客,转载请标明出处:http://blog.****.net/dream8062/archive/2009/02/27/3941087.aspx