You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于mxgraph开发如何拦截REMOVE_CELLS事件阻止删除单元格?

mxGraph删除单元格拦截方案

问题根因

mxEvent.REMOVE_CELLS 属于后置通知类事件,触发时单元格删除逻辑已经执行完成,该事件仅用于删除完成后的状态同步,因此调用evt.consume()无法终止已经执行完的删除操作,自然无法实现前置拦截。

最优解决方案:重写removeCells方法

所有mxGraph的删除操作(键盘触发、右键菜单触发、代码主动调用等)最终都会调用graph.removeCells方法,直接重写该方法即可实现全场景的删除拦截,代码示例如下:

// 先备份原始删除方法
const nativeRemoveCells = graph.removeCells.bind(graph)

// 重写删除逻辑,加入自定义确认
graph.removeCells = function(cells, includeEdges) {
  // 此处替换为你的自定义确认逻辑,比如弹窗、异步确认等
  const userConfirmed = confirm('确认删除选中内容?')
  if (userConfirmed) {
    // 用户确认后调用原生方法执行实际删除
    return nativeRemoveCells(cells, includeEdges)
  }
  // 用户取消时直接返回,不执行删除操作
  return []
}

注意事项

  • 该方案完全兼容mxGraph自带的undo/redo能力,仅当用户确认删除时才会产生历史记录,取消操作不会污染历史栈
  • 如果需要做异步确认(比如自定义弹窗组件是异步的),可以把原生方法调用放在异步回调里,逻辑完全通用

内容的提问来源于stack exchange,提问作者ssantos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:30:04