MVVM框架总结

Lua类

Lua中的类写法:比如LuaClass

  1. 添加元表方法__index,先从本原表中找,找不到就去本类的Super(其实就是基类)中去索引,找不到再去Super的原表中去寻找,依次循环,直到没有基类为止。
  2. 添加索引索引赋值方法newindex:和索引方法类似。
  3. 添加New方法,创建一个空表,设置它的元表,返回这个空表

这样就实现了C++中的类继承关系

Lua中的深拷贝

对表中的每个表数据和方法数据进行拷贝,同时对表数据的表数据和方法再执行拷贝。(这里可能听起来有点绕),递归调用,对表数据不光要拷贝key和value,还要拷贝它的元表。

 

绑定一个BoxViewWrapper的全过程

  1. 在UE蓝图中创建VerticalBox,勾选变量
  2. 在对应的View中设置相对应的Wrapper,如本例为BoxViewWrapper,Wrapper(一般继承自Lua基类,带有New方法其内核就是执行Wrapper自己的Preinit )   的主要功能是指定蓝图对应空间以及要添加的子View类型
  3. 在VM中绑定对应View中的Wrapper,VM的BindTargets可同时绑定多种Wrapper,在调用Addchild时候,VM会调用对应Wrapper的Addchild函数,这也是在VM中Addchild返回显示的主要步骤
  4. Wrapper的Addchild函数中会获取2步骤中的蓝图控件,调用蓝图空间中的Addchild,其实相当于给蓝图空间添加一个子View,子View的类型在步骤2中被指定,然后调用子View的Onshow,设置子View的VM,所以这里强调子View必须重载Reset接口,因为子View有可能是从池子里拿出来的,而不是重新生成。
  5. (其实相当于一个全新的View,只是和当前View存在包含关系,这个子View也有绑定对应的蓝图  Unlua接口)

绑定一个recyclerList的全过程(存疑)

  1. 在UE蓝图中创建一个RecyclerList控件(是项目自己创建的,不是UE自带的)
  2. 在对应的View中设置对应的Wrapper,这个Wrapper继承自LuaUEClass(没看懂这个类的特别之处,只是多了析构函数和实例化)
  3. 在VM中绑定对应的Wrapper,Add时RecycleList调用绑定了的蓝图控件的Reload函数。这个函数的定义不知道在哪里

绑定一个SubView的全过程

  1. 在主蓝图中添加自己定义的控件蓝图
  2. 在对应的View中利用控件蓝图以及控件蓝图绑定的VIEWDEF来出昂见一个子蓝图,(这里其实返回的就是对应控件蓝图的View)
  3. 在主蓝图中调用步骤2中View的Onshow
  4. 在主VM中创建子View的VM,并自己调用OnInit()。
  5. 这里要注意的一点是:子View和子ViewModel之所以链接起来是因为在VM中进行的DataBinding,当子VM改变时候,会通知调用子View的ResetViewModel函数

 

 

你可能感兴趣的:(腾讯客户端Gameplay)