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

相关文章

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2