am架构学习笔记(一) 四种model的update函数的异同

来源:互联网 发布:2017年上半年上牌数据 编辑:程序博客网 时间:2024/05/16 02:50

Note 1:  所有model的常用的方法,例如update, render, graphics等都在各自的model_New函数中设置。

Note 2: EventHandlerFunc函数中负责update,一个屏幕中的所有model以树状排列,一次update最大的model就可以遍历所有的model。

Note 3: update只负责设置每个model的当前值(如显示哪个state model, List 里focus哪一项),所有的画出model的方法,均在render里完成。

一、positional_update:

1)  根据position_New设置 ** CurChild

2) 运行该positional下的handler函数

3) 设置该positional的位置。

4) 合并update区域。

5) 遍历positional的孩子,判断该孩子是否显示,设置孩子的位置,update该孩子。

6) 储存ImaxPos,ImaxIndex的值。

 

二、List_update:

1) 根据List_New中的model->creation设置NewChildFun(与positional不同,positional的孩子设置在model->child中,因为List的孩子只有一种类型)。

2) 运行该List下的handler。

3) 读取该List的参数(array(横列或竖列),Ilinespace,indexes(可见项,是个数组),childNB,SlotNB)。

4) 若该List需refresh,则需先释放(如List里按上、下键)。

5) 设置该List的位置。

6) 合并update区域。

7) 遍历List的各项(从indexes里读可视的项,根据slot.h和slot.y计算SlotNB)。

8) 保存ImaxPos, indexes值,ImaxIndex可在handler或XML里设置。

三、state_update

1) state 与 List一样,孩子设在model->creation中(state的孩子也只能是一种类型)。

2) 运行该state下的handler里。

3) 读state的值。

4) 根据state的值决定生成哪个孩子。

5) 若state变化(与model->old_state不同),则先释放old_state孩子。

6) 计算该state的位置,合并update区域。

7)不需要保存什么(state的值存到model->old_state里,不存到hash表里)。

四、mapper_update

1) mapper没有孩子。

2) 运行该mapper下的handler函数。

3) 设置mapper位置。

4) 合并update区域。

5) 不需要保存什么。

So 1: 四种model的update基本上都完成以下动作:运行该model的handler,设置该model的位置及update区域,遍历该model的孩子。

So 2: 叶子节点一定是mapper model。

So 3: List model要注意哪些项可见。

So 4: 父结点若需要更新,则他的子结点都需更新。

原创粉丝点击