在vue2使用百度脑图的kityminder-core进行二次开发思维导图,在源码中添加新的命令

news2024/11/18 22:36:13

需求说明:最近在搞kityminder-core的思维导图,需要增加一个给节点添加文件的功能,一直在研究源码,发现都是通过执行命令的方式实现的。一直卡在新增命令的步骤,搞了好多天了今天找到了如何在源码里新增命令,怕之后忘记所以现在先来记录一下添加命令的步骤。

我是在这个大佬的源码基础上改的

GitHub - chenhengjie123/vue-testcase-minder-editor: 基于百度脑图的用例编辑器组件,支持记录测试结果

下面这个是我目前搞出来的百度脑图的功能,如果有人遇到类似问题可以留言问看见会回,这个东西我也花了好久时间才摸到点头绪,等我忙完了有空我再写一下怎么实现这个思维导图。

 添加命令

1、在kityminder-core/src/module中新建一个file.js文件

 2、仿照其他的js文件编写代码

数据存储

`node.getData(name)` 获得指定字段的数据

`node.setData(name, value)` 设定指定字段的数据

具体的字段名称与后端商定,我后端同事定义的是“jsonFile”

n.setData('jsonFile', value);

define(function (require, exports, module) {
    var kity = require('../core/kity');
    var utils = require('../core/utils');

    var Minder = require('../core/minder');
    var MinderNode = require('../core/node');
    var Command = require('../core/command');
    var Module = require('../core/module');
    var Renderer = require('../core/render');
    Module.register('FileModule', function () {

        /**
         * @command file
         * @description 为选中的节点添加文件  设置为 null 移除
         * @param {string}( afterName  uuid后的文件名)
         * @param {string}( fileUrl 设置为 null 移除)
         * @param {string}( agoName 原本的文件名)
         * @param {string}( physicsAddress 文件物理地址)
         * @param {string}( type 文件类型)
         *  为选中的文件添加文件
         * @state
         *   0: 当前有选中的节点
         *  -1: 当前没有选中的节点
         * @return 返回首个选中节点的超链接信息,Array 对象: `[{ afterName: 'afterName', fileUrl: 'fileUrl',agoName:'agoName',physicsAddress:'physicsAddress',type:'type'}]`
         */
        var FileCommand = kity.createClass('FileCommand', {
            base: Command,

            execute: function (km, value) {
                var nodes = km.getSelectedNodes();
                nodes.forEach(function (n) {
                    n.setData('jsonFile', value);
                    n.render();
                });
                km.layout();
            },
            queryState: function (km) {
                var nodes = km.getSelectedNodes(),
                    result = 0;
                if (nodes.length === 0) {
                    return -1;
                }
                nodes.forEach(function (n) {
                    if (n && n.getData('jsonFile')) {
                        result = 0;
                        return false;
                    }
                });
                return result;
            },
            queryValue: function (km) {
                var node = km.getSelectedNode();
                return node.getData('jsonFile');
            }
        })

        return {
            commands: {
                file: FileCommand
            },
        }
    })
});

3、在import.js中导入file,js文件

 4、在dist/kityminder.core.js中仿照其他的添加文件代码

 因为最后一个是_[81],所以新增的file写成_p[82]

 //src/module/file.js
    _p[82] = {
        value: function (require, exports, module) {
            var kity = _p.r(17);
            var utils = _p.r(33);
            var Minder = _p.r(19);
            var MinderNode = _p.r(21);
            var Command = _p.r(9);
            var Module = _p.r(20);
            var Renderer = _p.r(27);
            Module.register("FileModule", function () {

                /**
                 * @command File
                 * @description 为选中的节点添加文件  设置为 null 移除
                 * @param {string}( afterName  uuid后的文件名)
                 * @param {string}( fileUrl 设置为 null 移除)
                 * @param {string}( agoName 原本的文件名)
                 * @param {string}( physicsAddress 文件物理地址)
                 * @param {string}( type 文件类型)
                 *  为选中的文件添加文件
                 * @state
                 *   0: 当前有选中的节点
                 *  -1: 当前没有选中的节点
                 * @return 返回首个选中节点的超链接信息,Array 对象: `[{ afterName: 'afterName', fileUrl: 'fileUrl',agoName:'agoName',physicsAddress:'physicsAddress',type:'type'}]`
                 */
                var FileCommand = kity.createClass('FileCommand', {
                    base: Command,

                    execute: function (km, value) {
                        var nodes = km.getSelectedNodes();
                        nodes.forEach(function (n) {
                            n.setData('jsonFile', value);
                            n.render();
                        });
                        km.layout();
                    },
                    queryState: function (km) {
                        var nodes = km.getSelectedNodes(),
                            result = 0;
                        if (nodes.length === 0) {
                            return -1;
                        }
                        nodes.forEach(function (n) {
                            if (n && n.getData('jsonFile')) {
                                result = 0;
                                return false;
                            }
                        });
                        return result;
                    },
                    queryValue: function (km) {
                        var node = km.getSelectedNode();
                        return node.getData('jsonFile');
                    }
                });
                return {
                    commands: {
                        file: FileCommand
                    },
                }

            });
        }
    };

 5、在dist/kityminder.core.js中找到_p[35],添加_p.r(82)

 6、使用uglifyjs重新生成min.js文件

 7、测试

添加文件前的数据

添加文件后打印数据,数据成功添加到jsonFile字段中

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode 1807. 替换字符串中的括号内容【python3双指针+哈希表】实现过程分析以及思路整理

题目 给你一个字符串s,它包含一些括号对,每个括号中包含一个非空的键。 比方说,字符串"(name)is(age)yearsold"中,有两个括号对,分别包含键"name"和"age"。 你知道许多键对应的值&…

android实现侧边栏:解决header控件无法操作和底部menuitem点击无效的问题

1:目录结构:(源码和总结都放在b站,链接在底部) 2:实现的大概逻辑: 使用drawerlayout抽屉布局实现,并使用navigationview加载头部和底部 3:核心问题一:header…

用Python来创建7种不同的文件格式

用Python来创建7种不同的文件格式一、用Python来创建7种不同的文件格式1.1、文本文件1.2、CSV文件1.3、Excel文件1.4、压缩文件1.5、XML文件1.6、JSON文件1.7、PDF文件一、用Python来创建7种不同的文件格式 1.1、文本文件 写入 file_name "my_text_file.txt"# 将…

微信小程序——WXML模板语法-条件渲染,列表渲染

一.条件渲染1.wx:if在小程序中,使用wx:if"{{condition}}"来判断是否需要渲染该代码块:也可以用wx:elif和wx:else来添加else判断:实例如下:1.在js文件中定义一个typedata:{type:1 },此时虚拟页面上显示的就是&#xff1a…

二十四、Kubernetes中Deployment(Deploy)控制器详解

1、概述 在kubernetes中,有很多类型的pod控制器,每种都有自己的适合的场景,常见的有下面这些: ReplicationController:比较原始的pod控制器,已经被废弃,由ReplicaSet替代 ReplicaSet&#xff…

kafka/bin/kafka-run-class.sh: line 342: exec: java: not found

本来jps看了下,kafka和zookeeper都起来了,手痒,非要换宝塔的进程守护管理器,选目录为/home/kafka,命令为/home/kafka/bin/zookeeper-server-start.sh /home/kafka/config/zookeeper.properties 就在日志里看到 kafk…

马蹄集 整除的总数

整除的总数 难度&#xff1a;白银 时间限制&#xff1a;1秒 巴占用内存&#xff1a;64M 输入正整数N和M,其中N<M。求区间[N,M]中可被K整除的总数。 格式 输入格式&#xff1a;输入正整数N,M和K,空格分隔。 输出格式&#xff1a;输出整型 #include <bits/stdc.h&g…

RabbitMQ(二)使用Docker安装

目录1. 拉取 RabbitMQ 镜像2.启动 RabbitMQ 容器3.查看 RabbitMQ 是否启动官网地址&#xff1a;https://www.rabbitmq.com/ 下载地址&#xff1a;https://www.rabbitmq.com/download.html 这篇文章为了方便初学者入门&#xff0c;在 linux 环境下用 docker 直接安装 RabbitMQ&…

【JavaSE】String相关知识

String \ StringBuilder \ StringBufferString的值是不可变的&#xff0c;使用“”或者“”的方法尝试改变String的值并不是在原本的基础上修改&#xff0c;而是赋值给了新的字符串常量引用StringBuffer是线程安全的&#xff0c;使用的是无脑加synchronized的方法这三者的运行速…

10分钟上手一款好用的服务器节点监测工具(Server 酱)

Server 酱简介 Server酱&#xff0c;英文名「ServerChan」&#xff0c;是一款「手机」和「服务器」、「智能设备」之间的通信软件。说人话&#xff1f;就是从服务器、路由器等设备上推消息到手机的工具。开通并使用上它&#xff0c;只需要一分钟&#xff1a; 微信扫码登入设置…

Mysql可视化软件-Navicat和SQLyog

Navicat 可以将mysql可视化的一个软件 可以避免一直在命令行里面敲代码&#xff0c;很难绷 连接 密码写一个你能记住的&#xff0c;不然打不开连接 对应的IP可以是localhost或者127.0.0.1 都是本机 端口号就我们在my.ini写的那个 然后进行我们上面说的操作-新建一个数据库先…

Linux操作系统常用命令

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

【uniapp】记录地址管理页面

uniapp中的地址管理页面 <template><view class"container"><view class"oldaddress" v-for"(item,index) in cardInfo" :key"index"><view class"topview"><view class"name">{{i…

线缆行业单绞机控制算法(详细图解+代码)

在了解单绞机之前需要大家对收放卷以及排线控制有一定的了解,不清楚的可以参看下面几篇博客,这里不再赘述,受水平和能力所限,文中难免出现错误和不足之处,诚恳的欢迎大家批评和指正。 收放卷行业开环闭环控制算法 PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博…

Win10专业版系统Docker安装、配置和使用详细教程

一、win10专业版系统首先需要开启硬件虚拟化及Hyper-V功能&#xff0c;才能进行Docker for Windows软件安装。 如何开启硬件虚拟化&#xff0c;自行百度。可在任务栏中查看虚拟化是否开启。 win10系统&#xff0c;打开控制面板-“应用”-“程序和功能”&#xff0c;开启Hyper-V…

webpack 的基本使用

webpack 的基本使用配置 npm 镜像源创建列表隔行变色案例新建空白项目目录&#xff0c;初始化 package.json 配置文件通过 npm 安装 jquery新建 src 源代码目录index.htmlindex.js检查网页效果webpack 的安装webpack 的安装dependencies 与 devDependencies参数 -S 及 --save参…

【Linux工具】-yum/gdb

yum/gdb一&#xff0c;yum1&#xff0c;简介2&#xff0c;软件下载3&#xff0c;软件删除4&#xff0c;yum源与扩展yum源5&#xff0c;常见选项二&#xff0c;gdb1&#xff0c;简介2&#xff0c;gdb相关指令一&#xff0c;yum 1&#xff0c;简介 在Linux下&#xff0c;下载软…

中国芯片迎难而上,4纳米芯片量产,美媒:美国或肠子都悔青了

日前美国媒体《财富》杂志发表相关文章&#xff0c;认为对中国的芯片限制对美国是弊大于利&#xff0c;倒逼中国芯片加快芯片产业发展进程&#xff0c;而美国芯片却蒙受了太大的损失&#xff0c;与美国方面打擂台。美媒发表这篇文章之际&#xff0c;恰恰是中国芯片企业宣布近期…

TikTok不可思议的崛起

武汉瑞卡迪电子商务有限公司&#xff1a;《华尔街日报》网站11月5日发表题为《TikTok不可思议的崛起》的文章&#xff0c;全文摘编如下&#xff1a; 在短短五年里&#xff0c;TikTok已经爆发成为一种流行文化现象以及一个地缘政治闪爆点。它是全世界最热门的应用&#xff0c;被…

Vue纯前端:榜单管理系统

文章目录:一、主要功能&#xff1a;二、实现效果&#xff1a;1.主页:2.注册&#xff1a;3.登录&#xff1a;4.列表界面&#xff1a;5.添加应用界面&#xff1a;6.修改应用界面&#xff1a;7.模糊查询&#xff1a;三、整体架构&#xff1a;四、配置文件说明&#xff1a;五、功能…