[b][color=red][size=medium]自定义事件[/size][/color][/b]
{
import flash.events.Event;
public class BasePageChangeEvent extends Event
{
/**
* 当前页
*/
public var currentPage:int;
/**
* 总页数
*/
public var pageCount:int;
public function BasePageChangeEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
[b][color=red][size=medium]自定义组件.mxml[/size][/color][/b]
<?xml version="1.0" encoding="utf-8"?>
<components:BasePageClass xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:components="com.mjl.base.components.*">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:HGroup width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
<s:Button id="upPage" toolTip="上一页" enabled="{upPageBL}"
icon="@Embed('../assets/images/previous.png')"
skinClass="com.mjl.base.skins.BaseDateButtonSkin"
click="upPage_clickHandler(event)"/>
<s:ButtonBar id="BB" requireSelection="true" dataProvider="{bbCol}" selectedIndex="{bbSelecIndex}"
change="BB_changeHandler(event)"/>
<s:Button id="downPage" toolTip="下一页" enabled="{downPageBL}"
icon="@Embed('../assets/images/next.png')"
skinClass="com.mjl.base.skins.BaseDateButtonSkin"
click="downPage_clickHandler(event)"/>
</s:HGroup>
</components:BasePageClass>
[b][size=medium][color=red]自定义组件class[/color][/size][/b]
package com.mjl.base.components
{
import com.mjl.base.event.BasePageChangeEvent;
import com.mjl.commons.Common;
import flash.events.MouseEvent;
import mx.collections.ArrayCollection;
import spark.components.Button;
import spark.components.SkinnableContainer;
import spark.events.IndexChangeEvent;
//name是组件中执行函数的通道,相当于Button组件的click事件,只是点击触发些通道,此通道先自己处理一些逻辑
//再(派发时执行)触发函数
[Event(name="pageChange", type="com.mjl.base.event.BasePageChangeEvent")]
[Event(name="nextChange", type="com.mjl.base.event.BasePageChangeEvent")]
[Event(name="preChange", type="com.mjl.base.event.BasePageChangeEvent")]
public class BasePageClass extends SkinnableContainer
{
public function BasePageClass()
{
super();
}
private var _currentPage:int = 1;
private var _pageCount:int;
private var _pageSize:int;
private var _bbCol:ArrayCollection;
private var count:int;
[Bindable]
public var upPageBL:Boolean = false;
[Bindable]
public var downPageBL:Boolean = false;
[Bindable]
public var bbSelecIndex:int;
protected function BB_changeHandler(event:IndexChangeEvent):void
{
// TODO Auto-generated method stub
var index:int = (event.newIndex + 1);
bbSelecIndex = index -1;
_currentPage = index;
var bpEvent:BasePageChangeEvent = new BasePageChangeEvent("pageChange");
bpEvent.currentPage = _currentPage;
bpEvent.pageCount = count;
dispatchEvent(bpEvent);
if(index == 1)
{
upPageBL = false;
downPageBL = true;
return;
}
if(index == count)
{
upPageBL = true;
downPageBL = false;
return;
}
upPageBL = true;
downPageBL = true;
}
public function get pageSize():int
{
return _pageSize;
}
//组件中的属性,在组件中给此属性赋值
public function set pageSize(value:int):void
{
_pageSize = value;
}
public function get currentPage():int
{
return _currentPage;
}
//组件中的属性,在组件中给此属性赋值
public function set currentPage(value:int):void
{
_currentPage = value;
}
public function get bbCol():ArrayCollection
{
return _bbCol;
}
protected function upPage_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
_currentPage--;
if(_currentPage == 1 || _currentPage < 1)
{
upPageBL = false;
downPageBL = true;
_currentPage = 1;
}
else
{
upPageBL = true;
downPageBL = true;
}
var bpEvent:BasePageChangeEvent = new BasePageChangeEvent("preChange");
bpEvent.currentPage = _currentPage;
bpEvent.pageCount = count;
dispatchEvent(bpEvent);
bbSelecIndex = _currentPage -1;
}
protected function downPage_clickHandler(event:MouseEvent):void
{
_currentPage++;
if(_currentPage == count || _currentPage > count)
{
upPageBL = true;
downPageBL = false;
_currentPage = count;
}
else
{
upPageBL = true;
downPageBL = true;
}
var bpEvent:BasePageChangeEvent = new BasePageChangeEvent("nextChange");
bpEvent.currentPage = _currentPage;
bpEvent.pageCount = count;
dispatchEvent(bpEvent);
bbSelecIndex = _currentPage -1;
}
public function get pageCount():int
{
return _pageCount;
}
//组件中的属性,在组件中给此属性赋值
public function set pageCount(value:int):void
{
if(_bbCol == null)
{
_bbCol = new ArrayCollection();
}
_bbCol.removeAll();
count = value%pageSize == 0 ? value/pageSize : (value/pageSize) +1;
for(var i:int = 1;i <= count; i++)
{
_bbCol.addItem(i);
}
if(count > 1)
{
downPageBL = true;
}
_pageCount = value;
}
}
}
[b][size=medium][color=red]主应用的页面.mxml[/color][/size][/b]
<?xml version="1.0" encoding="utf-8"?>
<view:RoleClass xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:view="com.mjl.blog.module.role.view.*"
xmlns:control="com.mjl.blog.module.role.control.*"
xmlns:components="com.mjl.base.components.*"
creationComplete="roleclass1_creationCompleteHandler(event)"
>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<control:Control id="control"/>
</fx:Declarations>
<components:BasePanel width="100%" height="100%"
backgroundColor="#FFFFFF" icon="@Embed('images/title-role.png')"
skinClass="com.mjl.base.skins.BasePanelSkin">
<s:HGroup width="100%" bottom="0" verticalAlign="middle" horizontalAlign="center">
<!—自定义组件部分—>
<components:BasePage id="BP" pageSize="{m.pageSize}" pageCount="{m.countPage}"
pageChange="BP_pageChangeHandler(event)"
nextChange="BP_nextChangeHandler(event)"
preChange="BP_preChangeHandler(event)"
/>
</s:HGroup>
</components:BasePanel>
</view:RoleClass>
[b][size=medium][color=red]主应用的class[/color][/size][/b]
package com.mjl.blog.module.role.view
{
public class RoleClass extends SkinnableContainer
{
public function RoleClass()
{
super();
}
protected function BP_pageChangeHandler(event:BasePageChangeEvent):void
{
// TODO Auto-generated method stub
m.currentPage = event.currentPage;
control.role_listAllRole(event.currentPage,m.pageSize);
}
protected function BP_nextChangeHandler(event:BasePageChangeEvent):void
{
// TODO Auto-generated method stub
trace("下一页"+event.currentPage);
m.currentPage = event.currentPage;
control.role_roleNextPage(m.nextId,event.currentPage);
}
protected function BP_preChangeHandler(event:BasePageChangeEvent):void
{
// TODO Auto-generated method stub
trace("上一页"+event.currentPage);
m.currentPage = event.currentPage;
control.role_rolePrePage(m.preId,event.currentPage);
}
}
}
{
import flash.events.Event;
public class BasePageChangeEvent extends Event
{
/**
* 当前页
*/
public var currentPage:int;
/**
* 总页数
*/
public var pageCount:int;
public function BasePageChangeEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
[b][color=red][size=medium]自定义组件.mxml[/size][/color][/b]
<?xml version="1.0" encoding="utf-8"?>
<components:BasePageClass xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:components="com.mjl.base.components.*">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:HGroup width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
<s:Button id="upPage" toolTip="上一页" enabled="{upPageBL}"
icon="@Embed('../assets/images/previous.png')"
skinClass="com.mjl.base.skins.BaseDateButtonSkin"
click="upPage_clickHandler(event)"/>
<s:ButtonBar id="BB" requireSelection="true" dataProvider="{bbCol}" selectedIndex="{bbSelecIndex}"
change="BB_changeHandler(event)"/>
<s:Button id="downPage" toolTip="下一页" enabled="{downPageBL}"
icon="@Embed('../assets/images/next.png')"
skinClass="com.mjl.base.skins.BaseDateButtonSkin"
click="downPage_clickHandler(event)"/>
</s:HGroup>
</components:BasePageClass>
[b][size=medium][color=red]自定义组件class[/color][/size][/b]
package com.mjl.base.components
{
import com.mjl.base.event.BasePageChangeEvent;
import com.mjl.commons.Common;
import flash.events.MouseEvent;
import mx.collections.ArrayCollection;
import spark.components.Button;
import spark.components.SkinnableContainer;
import spark.events.IndexChangeEvent;
//name是组件中执行函数的通道,相当于Button组件的click事件,只是点击触发些通道,此通道先自己处理一些逻辑
//再(派发时执行)触发函数
[Event(name="pageChange", type="com.mjl.base.event.BasePageChangeEvent")]
[Event(name="nextChange", type="com.mjl.base.event.BasePageChangeEvent")]
[Event(name="preChange", type="com.mjl.base.event.BasePageChangeEvent")]
public class BasePageClass extends SkinnableContainer
{
public function BasePageClass()
{
super();
}
private var _currentPage:int = 1;
private var _pageCount:int;
private var _pageSize:int;
private var _bbCol:ArrayCollection;
private var count:int;
[Bindable]
public var upPageBL:Boolean = false;
[Bindable]
public var downPageBL:Boolean = false;
[Bindable]
public var bbSelecIndex:int;
protected function BB_changeHandler(event:IndexChangeEvent):void
{
// TODO Auto-generated method stub
var index:int = (event.newIndex + 1);
bbSelecIndex = index -1;
_currentPage = index;
var bpEvent:BasePageChangeEvent = new BasePageChangeEvent("pageChange");
bpEvent.currentPage = _currentPage;
bpEvent.pageCount = count;
dispatchEvent(bpEvent);
if(index == 1)
{
upPageBL = false;
downPageBL = true;
return;
}
if(index == count)
{
upPageBL = true;
downPageBL = false;
return;
}
upPageBL = true;
downPageBL = true;
}
public function get pageSize():int
{
return _pageSize;
}
//组件中的属性,在组件中给此属性赋值
public function set pageSize(value:int):void
{
_pageSize = value;
}
public function get currentPage():int
{
return _currentPage;
}
//组件中的属性,在组件中给此属性赋值
public function set currentPage(value:int):void
{
_currentPage = value;
}
public function get bbCol():ArrayCollection
{
return _bbCol;
}
protected function upPage_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
_currentPage--;
if(_currentPage == 1 || _currentPage < 1)
{
upPageBL = false;
downPageBL = true;
_currentPage = 1;
}
else
{
upPageBL = true;
downPageBL = true;
}
var bpEvent:BasePageChangeEvent = new BasePageChangeEvent("preChange");
bpEvent.currentPage = _currentPage;
bpEvent.pageCount = count;
dispatchEvent(bpEvent);
bbSelecIndex = _currentPage -1;
}
protected function downPage_clickHandler(event:MouseEvent):void
{
_currentPage++;
if(_currentPage == count || _currentPage > count)
{
upPageBL = true;
downPageBL = false;
_currentPage = count;
}
else
{
upPageBL = true;
downPageBL = true;
}
var bpEvent:BasePageChangeEvent = new BasePageChangeEvent("nextChange");
bpEvent.currentPage = _currentPage;
bpEvent.pageCount = count;
dispatchEvent(bpEvent);
bbSelecIndex = _currentPage -1;
}
public function get pageCount():int
{
return _pageCount;
}
//组件中的属性,在组件中给此属性赋值
public function set pageCount(value:int):void
{
if(_bbCol == null)
{
_bbCol = new ArrayCollection();
}
_bbCol.removeAll();
count = value%pageSize == 0 ? value/pageSize : (value/pageSize) +1;
for(var i:int = 1;i <= count; i++)
{
_bbCol.addItem(i);
}
if(count > 1)
{
downPageBL = true;
}
_pageCount = value;
}
}
}
[b][size=medium][color=red]主应用的页面.mxml[/color][/size][/b]
<?xml version="1.0" encoding="utf-8"?>
<view:RoleClass xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:view="com.mjl.blog.module.role.view.*"
xmlns:control="com.mjl.blog.module.role.control.*"
xmlns:components="com.mjl.base.components.*"
creationComplete="roleclass1_creationCompleteHandler(event)"
>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<control:Control id="control"/>
</fx:Declarations>
<components:BasePanel width="100%" height="100%"
backgroundColor="#FFFFFF" icon="@Embed('images/title-role.png')"
skinClass="com.mjl.base.skins.BasePanelSkin">
<s:HGroup width="100%" bottom="0" verticalAlign="middle" horizontalAlign="center">
<!—自定义组件部分—>
<components:BasePage id="BP" pageSize="{m.pageSize}" pageCount="{m.countPage}"
pageChange="BP_pageChangeHandler(event)"
nextChange="BP_nextChangeHandler(event)"
preChange="BP_preChangeHandler(event)"
/>
</s:HGroup>
</components:BasePanel>
</view:RoleClass>
[b][size=medium][color=red]主应用的class[/color][/size][/b]
package com.mjl.blog.module.role.view
{
public class RoleClass extends SkinnableContainer
{
public function RoleClass()
{
super();
}
protected function BP_pageChangeHandler(event:BasePageChangeEvent):void
{
// TODO Auto-generated method stub
m.currentPage = event.currentPage;
control.role_listAllRole(event.currentPage,m.pageSize);
}
protected function BP_nextChangeHandler(event:BasePageChangeEvent):void
{
// TODO Auto-generated method stub
trace("下一页"+event.currentPage);
m.currentPage = event.currentPage;
control.role_roleNextPage(m.nextId,event.currentPage);
}
protected function BP_preChangeHandler(event:BasePageChangeEvent):void
{
// TODO Auto-generated method stub
trace("上一页"+event.currentPage);
m.currentPage = event.currentPage;
control.role_rolePrePage(m.preId,event.currentPage);
}
}
}