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、其实还有很多细节内容,但是需要一个个的消化。。。。