gojs 进行监听删除事件及重写监听方法时调用原有方法

2023-12-19 12:38

本文主要是介绍gojs 进行监听删除事件及重写监听方法时调用原有方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我们想删除一个节点时,需要判断是否可删除才能进行进一步操作。因此需要对删除事件进行添加监听及重写删除事件。

首先是如何对删除事件添加监听。这部分可以在官网上找到 (点击打开链接):

 

        // notice whenever the selection may have changedmyDiagram.addDiagramListener("ChangedSelection", function(e) {myDelete();});// notice when the Paste command may need to be reenabledmyDiagram.addDiagramListener("ClipboardChanged", function(e) {myDelete();
});// notice whenever a transaction or undo/redo has occurredmyDiagram.addModelChangedListener(function(e) {if (e.isTransactionFinished) myDelete();
});

对于删除事件,目前看到官网上添加了三个监听事件,目前不清楚这三个监听分别起什么作用。

然后是myDelete()方法。此方法中就重写了删除方法。但是需要注意,调用myDelete的三个监听并不一定在删除状态下才进行,可能拖拽时就触发。但是具体为何不会触发删除事件,请往下看。

function myDelete() {var cmdhnd = myDiagram.commandHandler;var delFlag = false;cmdhnd.canDeleteSelection = function () {//var r = confirm("是否删除当前所选节点?此操作会导致基础数据信息同步删除!");//新建对象保存货架和库区var shelfs = [];var stocks = [];//遍历所选中的节点var goAjax = false;for (var it = myDiagram.selection.iterator; it.next();) {var part = it.value;  // part is now a Node or a Group or a Link or maybe a simple Partif (part instanceof go.Node && (part.data.category === "shelf")) {var id = part.data.id;if(id!==undefined){shelfs.push(id);goAjax = true;}}if (part instanceof go.Node && (part.data.category === "stock")) {var id = part.data.id;if(id!==undefined){stocks.push(id);goAjax = true;}}}if(goAjax){var r = confirm("是否删除当前所选节点?此操作会导致基础数据信息同步删除!");if(r){return true;/*var parems = {shelf: shelfs.join(","), stock: stocks.join(",")};//进行动态ajax判断是否可删除$.ajax({type: "post",url: ctxPath + "/tbifm07/deleteShelfAndStockAction11111",data: parems,dataType: "json",async: false,beforeSend: function () {waitW.show();},complete: function () {waitW.close();},success: function (data) {if (data.flag === 1) {if (data.result === "1") {return true;}else {GysAlert({content: data.message});return false;}}else {GysAlert({content: data.message});return false;}},error: function (e) {alertConsole(e);return false;}});*/}else{return false;}}else{return true;}};}

只要是监听引发的触发,都会调用上面的函数,但是为何只有删除时才执行上面的函数是因为 标红  行只重写了是否可删除方法。此方法为API提供。每次监听引发的函数Mydelete,其实都会执行,只不过只重写了删除。就只执行 canDeleteSelection方法。


对于只想监听但不想重写方法,API还提供了调用原有function的方法。举例说明,如果只想监听复制事件,则在上方MyDelete()函数中继续写:

cmdhnd.copySelection = function(obj){

 // todo Sth

go.CommandHandler.prototype.copySelection.call(cmdhnd);//注意,这句话就是调用原有API提供的操作进行复制。

//相当于扩展了复制类。更为仔细的讲,copySelection是CommandHandler类下的一个方法。而CommandHandler类

//又是go这个大的基类的一个类。在这里,使用基类下CommandHandler下的原型copySelection方法去代替当前已经覆写了的copySelection方法

//来去操作当前作用域。关于call的用法,这里有一个很好的说明。引用自其他博客:点击打开链接

}

即可。详情请看官网点击打开链接


这篇关于gojs 进行监听删除事件及重写监听方法时调用原有方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512182

相关文章

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估