在開發具有子窗體,或者itemrenderer的應用時,常常涉及到子窗體向父窗體傳遞參數或者從itemrenderer内的控件向外部的主程式傳遞參數的需求。這些都可以通過事件機制這一統一方法加以解決。
在我的應用中有兩個需求:
1、左側的list控件的itemrenderer中包含checkbox控件,當其狀态改變時需要同時改變主程式中的一個數組變量的内容;
2、左下方的“新增屆次”按鈕會彈出一個視窗,視窗中輸入屆次資訊後需要修改資料庫中的表,同時表的更改結果要能夠在list控件中展現出來。
這兩個需求我都通過事件機制來解決,具體方法如下:
第一個需求:
1、首先建立一個事件類:
package com.renda.event{
import
flash.events.event;
public class listitemchangeevent
extends event{
public var
jieci:object;//用來傳遞參數的類屬性
public
function listitemchangeevent(type:string,
jieci:object=null,
bubbles:boolean=false,
cancelable:boolean=false)
{
this.jieci=jieci;
super(type,
bubbles,
cancelable);
}
}
}
2、list控件的代碼如下:
<mx:list
id="jiecilist" bottom="42" top="38" left="10" right="0"
dataprovider="{jiecilistac}"
labelfunction="listlabelfunction">
<mx:itemrenderer>
<mx:component>
<mx:checkbox
change="onchange(event)">
<mx:script>
<![cdata[
import
com.renda.event.listitemchangeevent;
private
function onchange(evt:event):void
var
jieciobj:object=new
object
jieciobj.jie=data.jie
jieciobj.ci=data.ci
//觸發自定義事件,因為事件處理程式在主窗體中,是以evt的第三個參數即bubbles設定為true,表示冒泡到主程式層
evtchange:listitemchangeevent=new
listitemchangeevent("list_item_changed",jieciobj,true);
this.dispatchevent(evtchange);
}
]]>
</mx:script>
</mx:checkbox>
</mx:component>
</mx:itemrenderer>
</mx:list>
3、主程式的初始化函數中定義時間偵聽器:
private function
init():void{
jiecilist.addeventlistener("list_item_changed",listitemchangehandler);
}
4、主程式中定義事件處理函數:
private function listitemchangehandler(evt:listitemchangeevent):void
//需要執行的代碼放在這裡
對于第二個需求,也是同樣的原理,隻不過主程式中偵聽器的定義不是在程式初始化時,而是彈出視窗建立時,在子視窗關閉時觸發事件,在主程式中偵聽事件并作相應操作:
1、定義事件類:
package
com.renda.event{
//子窗體關閉事件
public
class windowcloseevent extends
event{
public
function windowcloseevent(type:string, bubbles:boolean=false,
cancelable:boolean=false){
super(type,
}
2、子窗體中在關閉子窗體之前觸發事件:
var evtclose:windowcloseevent=new
windowcloseevent("sub_window_closed");
this.dispatchevent(evtclose);
popupmanager.removepopup(this)//關閉子窗體
3、主程式中定義事件偵聽器:
newjiecibtnclickhandler(evt:mouseevent):void{//彈出子窗按鈕
var
popnewjieci:
newjieciwin=newjieciwin(popupmanager.createpopup(this,newjieciwin,true));
//彈出對話框居中
popupmanager.centerpopup(popnewjieci);
//定義事件偵聽器
popnewjieci.addeventlistener("sub_window_closed",newjieciwinclosehandler);
}
4、主程式中的事件處理函數:
private
function
newjieciwinclosehandler(evt:windowcloseevent):void{
//需要執行的代碼放在這裡
}
轉載自: http://blog.sina.com.cn/s/blog_4d65c19e0100gwuv.html