Skip to content

视图层

目前最为复杂的一层,因为view额外负责了真实的将生成的ui渲染到Leafer.js

目前的View分为了好几个类型,但是期间都有继承关系

uml diagram

View层做了什么?

实际上View可以把它理解成一个比较简单的Dom树 一个View上可以主要包含了

  • children 子节点列表
  • parentView
  • node 对应modelnode
  • ui 生成出的Leafer.js节点的视图对象

其中,Leafer.js的视图对象上也会额外挂载一个 ViewKey(当前是 __Y_MINDMAP_VIEW__ )方便直接控制Leafer.js的元素的时候能够拿到原始的View对象

同时为了方便绘图,本身view之间也会共享一个Context 期间包含了当前的主题信息以及Leaferrender

其他一些封装的辅助变量

node一样,view 本身会提供一些基础信息出来

  • depth 数据层面当前view对应的nodedepth
  • size nodeSize
  • pos 基于parent算出的当前view的位置,和prosemirror类似,相当于唯一坐标
  • bounds 当前view在画布上的边界信息
  • update 更新当前节点的绘制(开发中)

TextView

纯文本的View类型

NodeView

相比于TextView,NodeView会自动遍历children并且生成子view

同时额外提供一个getMatrix方法,用来获取在真实dom1元素上当前的尺寸和位置,类似getBoundingClientRect

BoardView

对NodeView的再次封装

相比较NodeviewBoardView内部会获得一个state用作数据源,同时也是整个画板

所以BoardView内部会初始化一个Leafer.jsapp用来做绘制管理,可以理解为,BoardView就是一个Leafer.jsapp, 其ui就是Leafer.jstree, 配合着内置的contextstate自动开始进行绘图

Todo

  • [ ] 基于数据变动更新view的办法