flex3:利用itemRenderer创建在线书店的图书信息显示页面
2009-08-31 21:41
190 查看
第一部分:预备知识----认识itemRenderer
我们经常用itemRenderer,使用List,DataGrid,TileList等组件时经常动不动就来个itemRenderder。虽然很熟悉了,但是我打算今天还是再好好认识一下它。
使用itemRenderer有两点需要注意:
1,对于flex框架,使用itemRenderer很件很耗费内存的事,如果可以避免尽量不要用。
2,一个误会
假设我有一个List组件,与他绑定的数据有1000条,现在我要渲染这个List。是不是要创建1000个itemRenderer实例啊?这是个误会。
再假设,我这个List只能显示10个条目,那么或许flex或许只会给你创建12个itemRender实例,至于为什么多出两个,是出于缓存和表现的原因。你拖动滚动条,第一条和第二条项目消失了,但是它们对应的itemRenderder只是改变了位置,加载了新的数据,还显示第十一和十二条项目。所以,itemRenderer是重用(recycled)的,这一点得格外注意。不要试图调用第X条的itemRenderer再修改它,因为如果此时它不再显示范围内,第X条对应的itemRenderer就不知道用来显示谁去了?要想改变一个itemRenderer,最好的办法就是根据它的数据来改变它。
第二部分:初级----inline itemRenderers
什么叫inline itemRenderer?这就是跟调用它的组件(以后成为list control)写在一起的那种。这是比较简单的那种。现在我们就用这种的itemRenderer先写个显示书单图书信息的页面。
下面是代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" verticalAlign="top"
implements="mx.controls.listClasses.IDropInListItemRenderer">
<mx:Script>
<![CDATA[
import mx.controls.listClasses.BaseListData;
[Bindable]
private var standardPrice:String;
override public function set data(value:Object):void{
super.data=value;
standardPrice=cf.format(Number(data.price));
}
private var _listData:BaseListData;
public function get listData() : BaseListData
{
return _listData;
}
public function set listData( value:BaseListData ) : void
{
_listData = value;
}
]]>
</mx:Script>
<mx:Image source="{data.image}"/>
<mx:VBox width="100%" height="100%">
<mx:Label text="{data.name}"/>
<mx:Label text="{standardPrice}"/>
<mx:Button label="buy"/>
</mx:VBox>
<mx:CurrencyFormatter id="cf"/>
</mx:HBox
虽然,涉及到的知识有些复杂但是步骤还是很简单的:
第一步:在跟标签写入implements="mx.controls.listClasses.IDropInListItemRenderer"
第二步:导入import mx.controls.listClasses.BaseListData;
第三步:把相关的代码拷入。
好了,现在的问题是,listData是做什么用的?因为我们实现IDropInListItemRenderer接口就是为了实现这个属性。它是做什么,有些复杂,可以去看参考资料,这里就不粘贴了。只说说怎么用它好了。
回到itemRenderer文件:处理buy按钮的事件:
<mx:Button label="buy">
<mx:click>
<![CDATA[
(listData.owner as MyTileList).disPatchBookEvent(data);
]]>
</mx:click>
</mx:Button>
现在回到list control所在的文件,捕获事件:
<local:MyTileList columnWidth="200" rowHeight="150" buyBook="doBuy(event)"
itemRenderer="BookInfoRenderer" dataProvider="{bookInfo.book}"/>
看到了吗?方便的地方就是我可以在标签里直接buyBook="doBuy(event)"这样写。
再加上处理函数doBuy(evnt)就大功告成了.
private function doBuy(event:BuyBookEvent):void{
mx.controls.Alert.show(event.bookData.name+":"+event.bookData.price);
}
好了就先写到这里吧,已经写了这么多了,O(∩_∩)O~。
例子虽然简单,可是内容还是很多的……
至于继承自UIComponent的itemRenderer,大概也是这个思路,有空再说吧!
我们经常用itemRenderer,使用List,DataGrid,TileList等组件时经常动不动就来个itemRenderder。虽然很熟悉了,但是我打算今天还是再好好认识一下它。
使用itemRenderer有两点需要注意:
1,对于flex框架,使用itemRenderer很件很耗费内存的事,如果可以避免尽量不要用。
2,一个误会
假设我有一个List组件,与他绑定的数据有1000条,现在我要渲染这个List。是不是要创建1000个itemRenderer实例啊?这是个误会。
再假设,我这个List只能显示10个条目,那么或许flex或许只会给你创建12个itemRender实例,至于为什么多出两个,是出于缓存和表现的原因。你拖动滚动条,第一条和第二条项目消失了,但是它们对应的itemRenderder只是改变了位置,加载了新的数据,还显示第十一和十二条项目。所以,itemRenderer是重用(recycled)的,这一点得格外注意。不要试图调用第X条的itemRenderer再修改它,因为如果此时它不再显示范围内,第X条对应的itemRenderer就不知道用来显示谁去了?要想改变一个itemRenderer,最好的办法就是根据它的数据来改变它。
第二部分:初级----inline itemRenderers
什么叫inline itemRenderer?这就是跟调用它的组件(以后成为list control)写在一起的那种。这是比较简单的那种。现在我们就用这种的itemRenderer先写个显示书单图书信息的页面。
下面是代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" verticalAlign="top"
implements="mx.controls.listClasses.IDropInListItemRenderer">
<mx:Script>
<![CDATA[
import mx.controls.listClasses.BaseListData;
[Bindable]
private var standardPrice:String;
override public function set data(value:Object):void{
super.data=value;
standardPrice=cf.format(Number(data.price));
}
private var _listData:BaseListData;
public function get listData() : BaseListData
{
return _listData;
}
public function set listData( value:BaseListData ) : void
{
_listData = value;
}
]]>
</mx:Script>
<mx:Image source="{data.image}"/>
<mx:VBox width="100%" height="100%">
<mx:Label text="{data.name}"/>
<mx:Label text="{standardPrice}"/>
<mx:Button label="buy"/>
</mx:VBox>
<mx:CurrencyFormatter id="cf"/>
</mx:HBox
虽然,涉及到的知识有些复杂但是步骤还是很简单的:
第一步:在跟标签写入implements="mx.controls.listClasses.IDropInListItemRenderer"
第二步:导入import mx.controls.listClasses.BaseListData;
第三步:把相关的代码拷入。
好了,现在的问题是,listData是做什么用的?因为我们实现IDropInListItemRenderer接口就是为了实现这个属性。它是做什么,有些复杂,可以去看参考资料,这里就不粘贴了。只说说怎么用它好了。
回到itemRenderer文件:处理buy按钮的事件:
<mx:Button label="buy">
<mx:click>
<![CDATA[
(listData.owner as MyTileList).disPatchBookEvent(data);
]]>
</mx:click>
</mx:Button>
现在回到list control所在的文件,捕获事件:
<local:MyTileList columnWidth="200" rowHeight="150" buyBook="doBuy(event)"
itemRenderer="BookInfoRenderer" dataProvider="{bookInfo.book}"/>
看到了吗?方便的地方就是我可以在标签里直接buyBook="doBuy(event)"这样写。
再加上处理函数doBuy(evnt)就大功告成了.
private function doBuy(event:BuyBookEvent):void{
mx.controls.Alert.show(event.bookData.name+":"+event.bookData.price);
}
好了就先写到这里吧,已经写了这么多了,O(∩_∩)O~。
例子虽然简单,可是内容还是很多的……
至于继承自UIComponent的itemRenderer,大概也是这个思路,有空再说吧!
相关文章推荐
- 新建页面DataXML,使用GridView显示book.xm中的图书信息(将books.xml文档和dataSet交互。 )
- 在昨天作业的基础上添加 :删除按钮,修改并保存按钮 和 添加按钮。完成这些按钮所对应的功能/新建页面DataXML,使用GridView显示book.xm中的图书信息
- 实现jsp页面显示用户登录信息,利用session保存。
- 新建页面DataXML,使用GridView显示book.xm中的图书信息(将books.xml文档和dataSet交互。注意:DataView的使用。ds.Tables[0].defaultView
- 利用springboot,mybatis和luncene整合创建博客系统(只给出全数据库搜索并显示在搜索页面)
- 利用jsp标签完成将用户登录的信息显示到该页面
- 利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)
- 微信小程序开发2-点击列表中的某一行跳转到新的页面显示该列的详细信息
- 创建并部署一个Servlet,要求在实现用户登录功能,当用户名和密码正确时跳转到欢迎页面,否则提示出错信息
- 页面操作完成时,显示提示信息并倒计N秒后跳转
- Java实现页面显示中的信息分页
- 如何利用PHP会话显示出当前在线的用户
- 编写一个手机类(Mobile),包括手机品牌(brand)、手机型号(type), * 方法包括显示手机信息,并编写测试类进行对象的创建
- 编写一个手机类(Mobile),包括手机品牌(brand)、手机型号(type), 方法包括显示手机信息,并编写测试类进行对象的创建
- 如何动态不显示页面底部的版权所有等信息???
- 利用Maven创建Javaweb工程时,webapp文件夹在项目根目录下没有显示怎么办?
- 查询数据库客户信息显示在页面并进行相关操作
- 利用Cookie变量来存储信息和服务器页面
- Perl解析当当网图书信息页面
- 利用Flex的Sound类动态显示导入MP3文件时的ID3信息