<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    samtiger


    QQ:418148757
    Name:yangchuan
    數(shù)據(jù)加載中……
    flex之彈出窗口數(shù)據(jù)傳遞

    彈出窗口:
    利用PopUpManager我們可以把flex容器組件作為一種彈出窗口,這樣也是便于我們將程序分塊編寫的方式之一。我們通常會自定義一個(gè)容器組件,作為彈出窗口的內(nèi)容。
    舉一個(gè)例子來說明我們可能利用彈出窗口的地方。

    我們做用戶信息的增刪改查。第一步我們會做一個(gè)Module,用于布置datagrid組件和增刪查三個(gè)按鈕,那么在這個(gè)Module中我們的datagrid主要就是用于顯示查詢到的用戶數(shù)據(jù)列表。那么增加按鈕事件就是我們彈出一個(gè)窗口來編輯數(shù)據(jù),完成后在該彈出窗口中點(diǎn)擊確定按鈕,數(shù)據(jù)將傳送給Module的一個(gè)函數(shù)。并由這個(gè)函數(shù)與后臺交互,最終使數(shù)據(jù)通過后臺添加到數(shù)據(jù)庫。那么這是彈出窗口向父窗體傳遞數(shù)據(jù)的例子,另外我們在Module的datagrid中雙擊選中的數(shù)據(jù),也會彈出窗口,并將該條datagrid的這條記錄數(shù)據(jù)顯示在彈出窗口的相應(yīng)輸入框中,供用戶編輯。當(dāng)然這就是父窗體向彈出窗口傳遞數(shù)據(jù)的例子了。
    在flex中,我所知道的父子窗口傳遞數(shù)據(jù)有兩種,姑且先讓我這么命名并區(qū)分它們:一種是事件處理型,另一種就是函數(shù)綁定型。
    第一種方式(事件處理型):先看代碼,假設(shè)我們已經(jīng)自定義好彈出窗體組件。那么看我們怎么在Module(也就是父窗體)中來調(diào)用彈出窗體的。
     1protected function button1_clickHandler(event:MouseEvent):void{
     2 //這里是新創(chuàng)建一個(gè)彈出窗體對象,UserWin為自定義的一個(gè)容器組件對象
     3         var win:UserWin = new UserWin(); 
     4    var user:TblBsUserType = new TblBsUserType();
     5//將user對象傳遞給彈出窗體,其中data為win里頭的一個(gè)空對象。在win里邊的代碼是public data:Object={};
     6    win.data.user = user;
     7//通過這種方法給win添加一個(gè)事件監(jiān)聽器
     8    win.addEventListener("sendData",onSendData);
     9                PopUpManager.addPopUp(win,this,true); 
    10                PopUpManager.centerPopUp(win);
    11            }

    12
    13private function onSendData(e:Event):void{
    14                var user:UserType = e.currentTarget.data.user;
    15                Alert.show(ro.toString());
    16            }
    如上注釋,我們父窗體向子窗體傳遞數(shù)據(jù)的時(shí)候其實(shí)就是像子窗體的一個(gè)已存在的對象中動態(tài)添加數(shù)據(jù)屬性即可。這一點(diǎn)是ecmascript的規(guī)范,也是他的一個(gè)很好的優(yōu)點(diǎn)。
    最后那個(gè)方法,其實(shí)就是我們處理彈出窗口傳數(shù)據(jù)給父窗體的一個(gè)處理過程,其實(shí)很簡單,為了解耦,我們一般不會在彈出窗口中做數(shù)據(jù)的處理過程,而是直接由彈出窗口傳回?cái)?shù)據(jù),交給父窗體處理。那么事件分發(fā)處理的方式,顯而易見就是我們在創(chuàng)建彈出窗體對象的時(shí)候,動態(tài)的給子窗體注冊一個(gè)事件監(jiān)聽器,,然后彈出窗體的確定按鈕中調(diào)用dispatchEvent(new Event("sendData"));即可將數(shù)據(jù)傳回給父窗體中定義的那個(gè)事件處理函數(shù)去處理。其中e.currentTarget表示當(dāng)前正在使用某個(gè)事件偵聽器處理 Event 對象的對象。也就是上邊的win對象。
    第二種函數(shù)綁定型,其實(shí)就是很簡單,我們知道在ecmascript中函數(shù)也是一種變量,那么就可以利用這一點(diǎn)將函數(shù)作為一個(gè)變量傳遞給彈出窗體,同樣可以達(dá)到我們處理的效果,
    代碼如下:
     1protected function button1_clickHandler(event:MouseEvent):void
     2            {
     3                var win:UserWin = new UserWin(); 
     4                var user:TblBsUserType = new TblBsUserType();
     5                win.data.user = user;
     6                win.data.send = add;
     7                //win.addEventListener("sendData",onSendData);
     8                PopUpManager.addPopUp(win,this,true); 
     9                PopUpManager.centerPopUp(win);
    10            }

    11
    12//結(jié)果處理函數(shù)
    13private function add(user:TblBsUserType):void{
    14                if(null != user.butyId && "" != user.butyId){
    15                    ro.addUser(user);
    16                }

    17            }

    那么在彈出窗體中我們只需要調(diào)用data.send(data.user);就可以了。

    備注:其實(shí)以上兩種方法,為了使用方便,其實(shí)都還可以優(yōu)化的地方,比如,事件處理方式,我們還可以在自定義組件中聲明事件
    <fx:Metadata>
      [Event(name="sendData",type="flash.events.Event")]
     </fx:Metadata>
    讓使用組件的mxml文檔也能顯示注冊事件,如:<user:UserWin x="115" y="231" sendData=“sendDataHandler(event)”>
     </user:UserWin>

    另外,在函數(shù)處理方式上,我們是利用函數(shù)綁定到對象的方式,來處理數(shù)據(jù)的,其實(shí),為了使用接口的人更明確一些,我們可以把這個(gè)函數(shù)預(yù)先定義為組件的屬性,比如:[Bindale]public var sendData:Function;這樣在創(chuàng)建組件對象的地方,就可以明確的把用戶自定義的處理函數(shù)賦值給這個(gè)屬性(sendData)。
    總之:不管怎么樣,事件處理和函數(shù)處理都可以完成我們的要求,任選其一即可。



    posted on 2010-04-10 17:07 sam.chuan.yang 閱讀(6686) 評論(7)  編輯  收藏 所屬分類: flex基礎(chǔ)

    評論

    # re: flex之彈出窗口數(shù)據(jù)傳遞[未登錄] 2012-03-15 10:29 aaaa

    aaa
      回復(fù)  更多評論    

    # re: flex之彈出窗口數(shù)據(jù)傳遞 2013-04-25 20:40 iui

    4444444
      回復(fù)  更多評論    

    # re: flex之彈出窗口數(shù)據(jù)傳遞 2013-06-07 09:12 小學(xué)

    倒薩
      回復(fù)  更多評論    

    # re: flex之彈出窗口數(shù)據(jù)傳遞 2013-06-07 21:45 

    電飯鍋電飯鍋
      回復(fù)  更多評論    

    # re: flex之彈出窗口數(shù)據(jù)傳遞 2013-07-05 12:56 fdsa

    fdas
      回復(fù)  更多評論    

    # re: flex之彈出窗口數(shù)據(jù)傳遞 2013-08-30 09:06 

    @aaaa
    撒旦法都是
      回復(fù)  更多評論    

    # re: flex之彈出窗口數(shù)據(jù)傳遞[未登錄] 2015-06-25 14:31 123123

    123123
      回復(fù)  更多評論    
    主站蜘蛛池模板: a级毛片在线视频免费观看| 亚洲乱色伦图片区小说| 一级成人a免费视频| 天天干在线免费视频| jlzzjlzz亚洲jzjzjz| 免费专区丝袜脚调教视频| 中文字幕亚洲精品资源网| 久久免费精品视频| 亚洲av永久无码精品网站| 国产真人无码作爱免费视频| 亚洲综合熟女久久久30p| 日韩大片在线永久免费观看网站| 免费A级毛片无码久久版| 国产午夜亚洲精品不卡| 亚洲国产精品碰碰| 韩日电影在线播放免费版| 亚洲AV日韩精品久久久久久| 精品一区二区三区无码免费视频| 久久夜色精品国产噜噜噜亚洲AV| 久久99国产乱子伦精品免费| 亚洲国产午夜电影在线入口| 台湾一级毛片永久免费| 亚洲天堂2017无码中文| 99视频在线精品免费观看6| 一本天堂ⅴ无码亚洲道久久| 一级毛片免费全部播放| 亚洲毛片网址在线观看中文字幕| 全部在线播放免费毛片| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲va久久久噜噜噜久久 | 亚洲高清偷拍一区二区三区| 另类图片亚洲校园小说区| 免费吃奶摸下激烈视频| 美女被爆羞羞网站在免费观看| 亚洲国产精品无码久久青草| 一级特黄录像视频免费| 国产亚洲一区二区三区在线观看| 免费国产99久久久香蕉| 亚洲视频在线观看不卡| 在线观看人成视频免费| 免费一级特黄特色大片|