FLEX 项目开发总结(今天的哈,没有具体的主题)

来源:互联网 发布:电动汽车发展前景 知乎 编辑:程序博客网 时间:2024/06/03 22:04

1、单例模式

一直知道单例模式,却一直未使用过,今天终于用到了

场景:有一个弹出窗口,页面一刷新会重复弹出,解决办法当然就是单例模式了

代码:

public static var _Instance:MessAlert;

//单例模式,只能弹出一个窗口
            public static function  getInstance():MessAlert{
                if(_Instance == null){
                    _Instance = new MessAlert();
                }
                return _Instance;
            }

调用的代码:

    var ma:MessAlert=getInstance();
2、flex 由右下角弹出提示窗口:

1)parent页面

setTimeout(alertT,1000); 

//弹出提示框
            private function alertT():void{  
                //浏览器的分辨率  
                var wx:Number=Capabilities.screenResolutionX;  
                var wy:Number=Capabilities.screenResolutionY;  
                
                var ma:MessAlert=getInstance();
                ma.owner=this;  
                ma.x=wx-ma.width-25;  
                ma.y=wy-ma.height*2+35;  
                PopUpEffert.addPopUp(ma,this,false);                  
            }
            
            //单例模式,只能弹出一个窗口
            public static function  getInstance():MessAlert{
                if(_Instance == null){
                    _Instance = new MessAlert();
                }
                return _Instance;
            }

PopUpEffert.as代码

package  module.global
{  
    import flash.display.DisplayObject;
    import flash.system.Capabilities;
    
    import mx.collections.ArrayCollection;
    import mx.core.IFlexDisplayObject;
    import mx.effects.Move;
    import mx.events.TweenEvent;
    import mx.managers.PopUpManager;
    
    public class PopUpEffert  
    {  
        public function PopUpEffert()  
        {  
        }  
        
        public static function addPopUp(window:IFlexDisplayObject,parent:DisplayObject,modal:Boolean):void{  
            //浏览器的分辨率  
            var wx:Number=Capabilities.screenResolutionX;  
            var wy:Number=Capabilities.screenResolutionY;

            var move:Move=new Move(window);  
            move.duration=1000;  
            move.yFrom=wy;  //目标的初始 y位置
            move.yTo=wy-window.height*2+35;  //目标的最终 y位置
            move.play();  
            PopUpManager.addPopUp(window,parent,modal);             


        }  
        
        public static function removePopUp(window:IFlexDisplayObject):void{  
            //浏览器的分辨率  
            var wx:Number=Capabilities.screenResolutionX;  
            var wy:Number=Capabilities.screenResolutionY;  
            
            var move:Move=new Move(window);  
            move.duration=1000;  
            move.yFrom=wy-window.height*2+35;  
            move.yTo=wy;  
            move.addEventListener(TweenEvent.TWEEN_END,function():void{  
                PopUpManager.removePopUp(window);  
            });  
            move.play();  
            //PopUpManager.removePopUp(window);
        }  
    }  

child代码(MessAlert.MXML)

<?xml version="1.0" encoding="utf-8"?>  
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"  
               xmlns:s="library://ns.adobe.com/flex/spark"  
               xmlns:mx="library://ns.adobe.com/flex/mx"  
               width="356" height="236"
               title="提醒信息"
               close="closeHandler(event)"
               creationComplete="initApp()">  
    <fx:Script>  
        <![CDATA[  
            import mx.events.CloseEvent;  
            import mx.managers.PopUpManager;  
            import module.global.PopUpEffert;            
            import mx.collections.ArrayCollection;
            import Utility.Time.DateUtils;            
            import spark.events.IndexChangeEvent;    
            import mx.controls.Alert;
            import module.ContractModule;
            
            [Bindable]
            private var _Application:ArrayCollection = new ArrayCollection();    
            [Bindable]
            private var _ApplicationBeforeEndDate:ArrayCollection = new ArrayCollection();                
            [Bindable]
            private var _ApplicationAfterEndDate:ArrayCollection = new ArrayCollection();                
            
            //TabBar的dataProvider            
            [Bindable]
            private var ARR:ArrayCollection = new ArrayCollection([
                {label:"即将到期合同", data:"contractBeforeEndDate"},
                {label:"已到期合同", data:"contractAfterEndDate"}
            ]);             

            //TabBar的切换
            private function on_tbSelectChange_Handler(event:IndexChangeEvent):void
            {
                if(event.newIndex == 0)
                {
                    currentState="state_BeforeTab";
                }else{
                    currentState="state_AfterTab";
                }                
            }
            
            //页面加载
            private function initApp():void
            {    
                //从父页面获取_Applications
                var parentWindow:ContractModule = this.owner as ContractModule;
                this._Application = parentWindow._Applications;
                
                //将_Application分成两部分,即将到期的(30天)和已到期的
                for each(var item:Object in _Application)
                {
                    if(DateUtils.format(new Date,DateUtils.FMT_ISO_DATE) > DateUtils.format(item.TERMINALDATE,DateUtils.FMT_ISO_DATE))
                    {
                        //已到期
                        _ApplicationAfterEndDate.addItem(item);
                        
                    }else if(DateUtils.format(new Date+30,DateUtils.FMT_ISO_DATE) >= DateUtils.format(item.TERMINALDATE,DateUtils.FMT_ISO_DATE)
                            && DateUtils.format(new Date,DateUtils.FMT_ISO_DATE) <= DateUtils.format(item.TERMINALDATE,DateUtils.FMT_ISO_DATE))
                    {
                        //30天内到期
                        _ApplicationBeforeEndDate.addItem(item);
                    }
                }                
            }    
            
            //关闭TitleWindow
            private function closeHandler(event:CloseEvent):void  
            {  
                PopUpEffert.removePopUp(this);
            }              
            
            //修改展示的时间格式--到期时间
            private function lbAPPLICATIONDATEEndFun(item:Object, column:GridColumn):String
            {                
                return DateUtils.format(item.TERMINALDATE,DateUtils.FMT_ISO_DATE);                
            }            
            
        ]]>  
    </fx:Script>  
    <fx:Declarations>  
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
    </fx:Declarations>  
    
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>    
    
    <s:states>
        <s:State name="state_BeforeTab"/>
        <s:State name="state_AfterTab"/>            
    </s:states>    

    <s:VGroup width="100%" height="100%">
        <s:TabBar id="tb"
                  change="on_tbSelectChange_Handler(event)">
            <s:layout>
                <s:HorizontalLayout/>
            </s:layout>            
            <s:dataProvider>
                {ARR}
            </s:dataProvider>    
        </s:TabBar>            
        <s:ModuleLoader excludeFrom="state_AfterTab"
                        width="100%" height="100%">    
                <s:DataGrid id="dgBeforeEndDate"
                            dataProvider="{_ApplicationBeforeEndDate}"
                            width="100%" height="100%">
                    <s:columns>
                        <s:ArrayCollection>
                            <s:GridColumn dataField="CLIENT"
                                          headerText="单位名称"/>
                            <s:GridColumn dataField="PROJECTNO"
                                          headerText="合同编号"/>
                            <s:GridColumn dataField="TERMINALDATE"
                                          headerText="到期时间"
                                          labelFunction="lbAPPLICATIONDATEEndFun"/>            
                        </s:ArrayCollection>
                    </s:columns>
                </s:DataGrid>
        </s:ModuleLoader>            
        <s:ModuleLoader includeIn="state_AfterTab"
                        width="100%" height="100%">
            <s:DataGrid id="dgAfterEndDate"
                        dataProvider="{_ApplicationAfterEndDate}"
                        width="100%" height="100%">
                <s:columns>
                    <s:ArrayCollection>
                        <s:GridColumn dataField="CLIENT"
                                      headerText="单位名称"/>
                        <s:GridColumn dataField="PROJECTNO"
                                      headerText="合同编号"/>
                        <s:GridColumn dataField="TERMINALDATE"
                                      headerText="到期时间"
                                      labelFunction="lbAPPLICATIONDATEEndFun"/>            
                    </s:ArrayCollection>
                </s:columns>
            </s:DataGrid>
        </s:ModuleLoader>            
    </s:VGroup>        
</s:TitleWindow>


3、在上面的这种弹出页面的方式,怎么把父页面的数值带到子页面

其实在上面粘贴的代码里都有,现在说的只是细节化的东西

子页面的代码:

                //从父页面获取_Applications
                var parentWindow:ContractModule = this.owner as ContractModule;
                this._Application = parentWindow._Applications;

4、怎么把一个ArrayCollection的值赋值给另外一个ArrayCollection

//将_Application分成两部分,即将到期的(30天)和已到期的
                for each(var item:Object in _Application)
                {
                    if(DateUtils.format(new Date,DateUtils.FMT_ISO_DATE) > DateUtils.format(item.TERMINALDATE,DateUtils.FMT_ISO_DATE))
                    {
                        //已到期
                        _ApplicationAfterEndDate.addItem(item);//把符合条件的item加到ApplicationAfterEndDate
                        
                    }else if(DateUtils.format(new Date+30,DateUtils.FMT_ISO_DATE) >= DateUtils.format(item.TERMINALDATE,DateUtils.FMT_ISO_DATE)
                            && DateUtils.format(new Date,DateUtils.FMT_ISO_DATE) <= DateUtils.format(item.TERMINALDATE,DateUtils.FMT_ISO_DATE))
                    {
                        //30天内到期
                        _ApplicationBeforeEndDate.addItem(item);
                    }
                }   

5、其实还有很多细节内容,但是需要一个个的消化。。。。












原创粉丝点击