框图编辑器-关于Vue.js和MxGraph之间的友谊


这一切是如何开始的?


我是前端开发人员,但是我为开发而努力,因此我决定编写一个全栈应用程序,并成为百万富翁,以获取宝贵的经验。

因此,我开始计划后端,选择MongoDB进行数据存储,并准备计划结构和字段之间的关系。

但是我遇到了一个简单而功能强大的模式编辑器的缺乏,而NoSQL数据库却没有多余的装饰。

-不? 因此,我将开展业务,找到一个库并填充界面!
Fullstack的想法被推到了后台,我开始研究最简单的数据库模式编辑器。
-天真...-但我稍后才意识到这一点。

搜索次数


首先,这类图书馆大多是有偿的,而且需要很多!
其次,那些免费的没有功能或充满了错误!

在第三个中将不会找到MxGraph。 尽管在上面写了出色的draw.io服务,但实际上它在Internet上没有提及,它本身是用于可视化和编辑数据的非常方便的工具。

投稿


我想每个人都听说过Vue.js ,但以防万一-这是JavaScript-一种用于创建反应式用户界面的框架。

MxGraph是一个用于可视化和编辑各种流程,工作流程和BPM,数据库可视化,地图网络和电信,地图绘制应用程序和GIS,UML图,电子电路,VLSI,CAD,财务和社交网络,组织结构图等的库。

相容性


MxGraph是一个相当老的(但不是过时的)工具,因此在此处的Vue项目中简单地进行npm安装不会给我们带来完全的兼容性。 因此,我不得不挖掘网络并开始生产自行车。

找到受苦的解决方案


导入和嵌入Vue组件如下所示:

<script> import mxgraph from 'mxgraph'; //            const graphConfig = { mxBasePath: '/mx/', //the path in mxClient.basePath. mxImageBasePath: '/mx/images', // the path in mxClient.imageBasePath. mxLanguage: 'en', // the language for resources in mxClient.language. mxDefaultLanguage: 'en', // the default language in mxClient.defaultLanguage. mxLoadResources: false, // if any resources should be loaded. Default is true. mxLoadStylesheets: false, // if any stylesheets should be loaded. Default is true }; const { mxClient, mxUtils, mxEvent, mxEditor, mxRectangle, mxGraph, mxGeometry, mxCell, mxImage, mxDivResizer, mxObjectCodec, mxCodecRegistry, mxConnectionHandler } = mxgraph(graphConfig); window.mxClient = mxClient; window.mxUtils = mxUtils; window.mxRectangle = mxRectangle; window.mxGraph = mxGraph; window.mxEvent = mxEvent; window.mxGeometry = mxGeometry; window.mxCell = mxCell; window.mxImage = mxImage; window.mxEditor = mxEditor; window.mxDivResizer = mxDivResizer; window.mxObjectCodec = mxObjectCodec; window.mxCodecRegistry = mxCodecRegistry; window.mxConnectionHandler = mxConnectionHandler; var editor; // CustomUserObject window.CustomUserObject = function (name, type) { this.name = name || 'New Name'; this.type = type || 'New Type'; this.clone = function () { return mxUtils.clone(this); }; }; export default { // vue logic } </script> 

为什么创建变量,然后又在窗口中注册变量?


事实是webpack在汇编过程中重命名了变量,而mxgraph随后找不到它们。 因此,特别是对于mxgraph,我将它们放在了全局对象中。

也不要忘记配置-尤其是在使用内置mxEditor接口时,否则库内容会出现问题。

为什么编辑器变量不可用?!


在操作过程中,由于mxgraph方法的上下文,我们将无法始终访问vue变量。 将它们纳入全局变量将大大节省时间和一些麻烦。

自定义数据对象为何再次在窗口中显示?


Mxgraph使用原型创建新的数据对象。 还需要将它们写入窗口-否则方案的内置导入/导出会出现问题。

进一步的开发变得更加容易,并且我不再遇到访问对象的问题。
我认为这种方法并不理想,如果有人为该兼容性解决方案提供替代方案,我会感到很高兴。

发生了什么事?


一个用于对数据库模式进行建模的小应用程序: nosqldbm.ru
这有助于我可视化未来项目的近似数据库架构。

感谢您阅读我的第一本出版物,希望您对此感兴趣。

完整的git示例

资料库

MxGraph选择

资料库
小指南
API文件
例子

Source: https://habr.com/ru/post/zh-CN474094/


All Articles