开源项目jsmind.js的右键扩展插件
开源项目jsmind.js的右键扩展插件
jsmind.menu.js 文档 说明:该文档是遵循开源规范开发的第一版jsmind插件。 功能:包含了 1、完整的右键功能 2、可配置右键功能选项 3、可配置的右键样式重写 4、v1.0.1 版本加入中台操作 5、v1.0.2 版本加入清楚mind默认事件函数preventMindEventDefault 依赖 : jsmind.js https://github.com/hizzgdev/jsmind 作者: Allen.sun 日期: 2019-12-05 #####[v1.0.1版本更新介绍](#jsmind.menu.js v1.0.1版 文档) 2019-12-9###正式的介绍
引入顺序: jsmind.js jsmind.menu.js
配置menu之前 需要先了解jsmind的配置 http://hizzgdev.github.io/jsmind/developer.html
了解了jsmind功能和配置之后 引入jsmind.menu.js 顺序如: 【引入顺序】
正式开始介绍menu的配置:
初级版:
{ menuOpts:{ // 这里加入一个专门配置menu的对象 showMenu: true, //showMenu 为 true 则打开右键功能 ,反之关闭 } };
简单的配置之后简单版的功能已经形成,我们去看一下:
简单版,分别提供了三个基本功能: 编辑节点(edit node),添加子节点(append child),删除节点(delete node)。
想要更多的功能怎么办?可以根据需要自行配置需要的功能:
menuOpts:{ showMenu: true, injectionList: ['edit', 'addChild', 'addBrother', 'delete','showAll','hideAll', 'screenshot', 'showNode', 'hideNode'], //这是完整的功能列表 },
我们再去看下 实例:
对应的功能分别是:
edit node 编辑节点 append child 新增子节点 append brother 新增兄弟节点 delete node 删除节点 show all 展开全部节点 hide all 隐藏全部节点 load mind picture 下载导图 (需要依赖插件jsmind.screenshot.js) show target node 展开选中的节点 hide target node 关闭选中的节点 为什么选项都是英文的呢?答案是与国际接轨...如果想自定义一个选项,可以尽享如下配置
menuOpts:{ showMenu: true, injectionList: [ {target:'edit',text: '编辑节点'}, {target:'addChild',text: '添加子节点'}, {target:'addBrother',text: '添加兄弟节点'}, ], }
以下是效果哦~
是不是很满意?
我们的项目需要知道我点了那个选项!这个咋办!这个我已经都考虑到了~ 这样进行配置,你将会得到你想知道的一切!
menuOpts:{ showMenu: true, injectionList: [ {target:'edit',text: '编辑节点', callback: function (node) { console.log(node) } }, {target:'addChild',text: '添加子节点', callback: function (node) { console.log(node) } }, {target:'addBrother',text: '添加兄弟节点', callback: function (node) { console.log(node) } } ], },
您可以亲自去试一下~,简单配置一个callback即可
这个右键我们产品觉得太丑了!我改如何重写?这个.....这个.....试试添加一个style属性你会得到惊喜
menuOpts:{ showMenu: true, tipContent: '这是一个新增的提示', style: { menu:{ // 控制menu容器的样式 background: 'red' //添加一个红色的北京 }, menuItem:{ // 控制条目的样式 'font-weight': 700 //文字加粗效果 }, } },
效果这样的!
还是很丑?? 哈哈那你就自己添加样式属性吧! 注意事项:样式属性需要时JSON格式的
还有其他人性化的设置吗?这是什么?
再不选中节点的情况下,单机右键,选中 编辑节点 就会有这样的提示~,原因是 插件没有捕获到节点而无法进行下一步操作,所以说,在没选中节点的情况下,部分功能是无法使用的。
圆规正传,我们是不是可以自定义提示语呢?
可以的
menuOpts:{ showMenu: true, style: { menu:{ background: 'red' }, menuItem:{ 'font-weight': 800 }, }, tipContent: '我要自定义一个提示!!!', },
就可以啦!
-------------------------------------------END?----------------------------------------------------
no!!!!!
我们有更多的事情去做!
jsmind.menu.js v1.0.1版 文档 在 v1.0.1版本中新增了: switchMidStage /* Boolean */ 中台开关 newNodeText /* String */ 新增节点的默认显示名称说明: switchMidStage为true时,全部的右键功能都会被相应回调函数的参数next控制,执行next则程序会继续往下执行,否则操作会被终止。 不同回调函数中的next对参数的要求略有不同。
解决的问题:针对操作之前的动作进行一次拦截,并主动权交给调用方,比如新增一个节点,需要赋值一个有意义的ID,而不是一个随机产生的ID。包括很多异步操作。
menuOpts:{ showMenu: true, switchMidStage: true, //开启中台 newNodeText:'新的节点', injectionList: [ {target:'edit',text: '编辑节点', callback: function (node,next) { fn() console.log(node) } }, {target:'addChild',text: '添加子节点', callback: function (node,next) { //next 需要接收一个ID console.log(node); var r = confirm('bulabulabula') r && fn(Math.random(0, 1000)); } }, {target:'addBrother',text: '添加兄弟节点', callback: function (node,next) { //next 需要接收一个ID var r = confirm('bulabulabula') r && fn(Math.random(0, 1000)); } }, {target:'delete',text: '删除节点', callback: function (node,next) { console.log(node) fn(); } }, {target:'showAll',text: '展开全部节点', callback: function (node,next) { console.log(node) fn(); } }, {target:'hideAll',text: '收起全部节点', callback: function (node,next) { console.log(node) fn(); } }, {target:'screenshot',text: '下载导图', callback: function (node,next) { console.log(node) fn(); } }, {target:'showNode',text: '展开节点', callback: function (node ,next) { console.log(node) fn(); } }, {target:'hideNode',text: '关闭节点', callback: function (node,next) { console.log(node) fn(); } }, ], tipContent: '我要自定义一个提示!!!!', style: { menu:{ background: 'red' }, menuItem:{ 'font-weight': 800, }, } }, jsmind.menu.js v1.0.2版 文档 在 v1.0.2版本中新增了:
全局函数:preventMindEventDefault() 参数:无; 作用:解除jsmind 页面事件的影响; 使用方法:
var mind = {//json}; var option = {// option}; jsMind.preventMindEventDefault(); // new 对象之前调用,即可生效 var jm = new jsMind(options); jm.show(mind); 注意事项:
1、该方法会使,双击节点编辑失效;
2、该方法会使,快捷键失效;
3、注意该方法只有再调用的jsmind.menu.js 脚本之后才会存在。
jsmind.menu.js v1.0.3版 文档
在 v1.0.3版本中新增了:
针对编辑进行的专项操作优化;
增加了editCaller,编辑观察者;
解决问题的场景:
在jsmind.menu.js v1.0.1/2 两个版本中,编辑并不能做到自由控制。
场景1: 页面中的节点的增删改查不需要,率先跟后台交互,只需要最后一次提交即可。
解决场景:这是最简单的场景,只需要打开showMenu:true 即可 最后再统一提交树形数据;
场景2: 增删改查 每一次都需要跟后台做互动,所以需要做大量手脚和控制去完成这样的需求,switchMidStage 中台概念及被引入,解释为了解决类似的问题,中台通过next函数即可实现控制;前两个版本 增删查 都实现了中台操作,只有改比较特殊,由于时间的关系并未解决。本次专门对“改”做了一次迭代。
使用方法:
var option = { menuOpts:{ showMenu: true, switchMidStage: true, editCaller: function (info, next) { //编辑观察者 // info 包含节点的id 和 节点编辑之后的名称 // next 即可执行后台的下一步操作; 调用了next 会执行节点的更新操作,否则处于中断状态 }, }, } 用户表,储存用户信息
|字段|类型|必填|默认|注释| |:---- |:------- |:--- |-- -|------ | |editCaller |Function |否 |无 | 本属性可以传也可以不传,如果传入的类型是Funtion则可以正常的进行编辑的中台操作,如果类型传错了或者没有定义该字段,插件系统会自动的跳过中台,直接更新节点。 |
备注:无 注意事项: 1、中台操作需要配合 v1.0.2版本中的 preventMindEventDefault 方法去使用,如果不调用该方法会导致页面的事件调用错乱;
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。