flash组件--List/Grid(1)
更新日期:
组件思考
List
DataGrid
这两个组件在Flex中是相当重量级的组件,写得非常好,但是过于庞大。我们的游戏也由用到类似功能的组件—由数据驱动的组件。有时候数据量可能会比较大,组件的效率成了首要考虑的因素。
抽象
首先是数据源的问题,因为数据源的修改会直接影响到组件的现实问题,所以对于数据源的修改更新需要被组件所知道,但是AS提供的几个关系数据源的类都没有派发事件的能力,所以需要自己拓展一个数据源类来使用。
其次是显示子对象的处理,和Flex一样也抽象一个RenderItem
基类用作项呈示器,每一项数据都对应创建一个项呈示器的实例,内部负责创建和销毁。
最后在视图滚动的时候数据源该如果创建子对象也是需要解决的.在视图滚动的时候如果更新显示对象以及滚动范围。
实现
数据源在被修改的时候需要通知组件做相对应的改变,新建一个类可以在数据源改变的时候派发事件。用一个EventDispatch
封装一个Array
的操作,内部重新实现Array
的几个可以改变数据源的函数,比如push
, pop
等等,在改变数据源的时候派发事件即可在组件监听到并做出相对应的逻辑处理。
项呈示器每一个实例有包含一个数据源的子项数据,具有以下属性
index
当前的索引data
数据项
并且实现一个接口,该接口有一个函数签名:
|
|
在组件的数据源需要重新复制到项呈示器的时候调用这个函数更新即可,每个项呈示器都需要在update
函数中处理和数据有关的逻辑。