lowcodeEngine设计器源码简析(创建流程,主要对象), 怎么生成一个左侧面板
lowcodeEngine 怎么生成一个左侧面板
初始化流程

如何生成一个左侧面板
- 初始化插件时往skeleton.leftArea新增按钮,新增按钮时往skeleton.leftFloatArea新增面板对象
- 点击按钮时,调用panel方法,处理面板的显示隐藏
- workBench-->leftFloatArea --> skeleton.leftFloatRea.container.items.map(item=>item.content)--->Panel-->PanelView(widget-view)
主要类
lowcodeEngine有很多同名的类,shell下为对外开放的API, 保持内部类的引用
Designer:
设计器主体,保存editor, project, dragon等索引。
designer模块创建和管理所有ComponentMeta ,其他模块通过 designer 来获取指定的 ComponentMeta 实例;
注册dragon.onDrag onDragend等事件
Dragon:
拖拽引擎(Dragon)核心完成的工作是将被拖拽对象拖拽到目标位置, 内部有自己的EventEmiter对象(与editor的EventEmitter相互独立)
editor:
编辑器上下文 editor,主要包含:消息通知、插件引用等
继承EventEmitter来处理事件, 保存skeleton,plugins,designer等对象,
skeleton:
提供API能力, 内部保存inner-skeleton
inner-skeleton(editor-skeleton):
整体面板的管理扩展(对象保存,创建)
存放containers(widgetContainer实例,与Area对象中的container 是同一个对象实例),Area对象(leftArea,rightArea, toolBar等), widgets(存放具体的组件)
Area:
Area对象的管理(新增,删除,显示 ,隐藏),内部有WidgetContainer对象实例
WidgetContainer:
Widget对象的管理(存放实例对象items, 新增,删除,读取)。新增时是调用skeleton的createWidget方法创建Widget实例(根据不同类型生成PanelDock, Dock, Widget)
PanelDock对象
mobx化之后的content对应左侧面板的按钮
Panel控制类 LeftFloatPane组件展示
面板的显示隐藏
模型系统
官方介绍很详情,移步官方介绍
项目模型(Project)
项目模型提供项目管理能力,模型系统最顶层的模型。项目模型实例下可以持有多个文档模型的实例,其他模型实例(Document , Node, Prop等)均需要通过 project 来获得
文档模型(DocumentModel)
文档模型提供文档管理的能力,每一个页面即一个文档流,对应一个文档模型。文档模型包含了一组 Node 组成的一颗树,类似于 DOM。
节点模型(Node)
节点模型聚焦于单层级的 schema 相关操作:
属性模型(Props, Prop)
组件描述模型(ComponentMeta)
每一个组件对应一个 ComponentMeta 的实例,其属性和方法就是描述协议中的所有字段,所有 ComponentMeta 都由设计器器的 designer 模块进行创建和管理,其他模块通过 designer 来获取指定的 ComponentMeta 实例,尤其是每个 Node 实例上都会挂载对应的 ComponentMeta 实例。
lowcodeEngine设计器源码简析(创建流程,主要对象), 怎么生成一个左侧面板的更多相关文章
- Flink源码阅读(一)——Flink on Yarn的Per-job模式源码简析
一.前言 个人感觉学习Flink其实最不应该错过的博文是Flink社区的博文系列,里面的文章是不会让人失望的.强烈安利:https://ververica.cn/developers-resource ...
- SpringMVC学习(一)——概念、流程图、源码简析
学习资料:开涛的<跟我学SpringMVC.pdf> 众所周知,springMVC是比较常用的web框架,通常整合spring使用.这里抛开spring,单纯的对springMVC做一下总 ...
- django-jwt token校验源码简析
一. jwt token校验源码简析 1.1 前言 之前使用jwt签发了token,里面的头部包含了加密的方式.是否有签名等,而载荷中包含用户名.用户主键.过期时间等信息,最后的签名还使用了摘要算法进 ...
- 0002 - Spring MVC 拦截器源码简析:拦截器加载与执行
1.概述 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权限验证.记录请求信息的日 ...
- OpenStack之Glance源码简析
Glance简介 OpenStack镜像服务器是一套虚拟机镜像发现.注册.检索. glance架构图: Glance源码结构: glance/api:主要负责接收响应镜像管理命令的Restful请求, ...
- spring ioc源码简析
ClassPathXmlApplicationContext 首先我们先从平时启动spring常用的ClassPathXmlApplicationContext开始解析 ApplicationCont ...
- AFNetworking源码简析
AFNetworking基本是苹果开发中网络请求库的标配,它是一个轻量级的网络库,专门针对iOS和OS X的网络应用设计,具有模块化的架构和丰富的APIs接口,功能强大并且使用简单,深受苹果应用开发人 ...
- ElementUI 源码简析——源码结构篇
ElementUI 作为当前运用的最广的 Vue PC 端组件库,很多 Vue 组件库的架构都是参照 ElementUI 做的.作为一个有梦想的前端(咸鱼),当然需要好好学习一番这套比较成熟的架构. ...
- DRF之APIView源码简析
一. 安装djangorestframework 安装的方式有以下三种,注意,模块就叫djangorestframework. 方式一:pip3 install djangorestframework ...
- 并发系列(二)——FutureTask类源码简析
背景 本文基于JDK 11,主要介绍FutureTask类中的run().get()和cancel() 方法,没有过多解析相应interface中的注释,但阅读源码时建议先阅读注释,明白方法的主要的功 ...
随机推荐
- 结对项目总结 -- 基于Qt开发的win10桌面应用
担任角色 在这次结对项目中,由于采用了我的个人项目作为参考,所以我继续担任后端开发的角色. 开发环境 前端采用Qt Creator4.13.2 (Community) 后端采用C++ 如何复用个人项目 ...
- JSP第七次作业
1.做一个图书类Book id,name,price ,get,set访问器,构造方法2个,1个无参,1个有参做一个测试类,在main中创建3个图书对象,放到list集合中.做一个菜单,可以添加,删除 ...
- python加密解密之AES
def encrypt(self, params: str, key: str, iv: str) -> str: """加密""" ...
- 10分钟了解MVVM,实现简易MVVM
MVVM 是 Model-View-ViewModel 缩写,也就是把 MVC 中的 Controller 演变成 ViewModel.Model 层代表数据模型,View 代表 UI 组件,View ...
- Hystrix断路器
1.介绍 ①产生原因 服务雪崩: 多个微服务之间调用,假设A调用B,C,B和C又调用其他微服务,这就是扇出. 如果扇出的链路上有某个微服务调用响应时间过长或者不可用,那么A调用会占用越来越多的系统资源 ...
- ROS自定义数据类型
1.简介 自定义数据包可以在使用数据的功能包内进行创建,也可以单独创建一个功能包来专门进行自定义数据类型. 1.步骤: 1.创建一个功能包 进入工作空间catkin_ws/src catkin_cre ...
- GDOI2021游记
\(\text{Day0}\) 4月9日抵达深圳耀华实验学校 宿舍在迷你公寓,竟然是女生公寓?!! 我想起了 \(b\) 站看到的一个 \(NOI\) 全国总决赛的纪录片(惊人的相似) 不过确实还行 ...
- 零基础解读ChatGPT:对人类未来工作是威胁还是帮助?
摘要:火到现在的ChatGPT到底是什么?它背后有哪些技术?对于我们的工作和生活会有啥影响?快来一起了解吧~ 本文分享自华为云社区<零基础解读ChatGPT:对人类未来工作是威胁还是帮助?> ...
- CSS3--点击弹出菜单动画
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- 第二天python 基础
一.Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分 ...