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

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令