jsPlumb添加Bezier连接器时报resetBounds、canvas未定义错误如何解决?
报错产生原因
- 未将导入的
BezierConnector注册到当前使用的jsPlumb实例中,实例无法识别对应连接器类型,导致连接器初始化失败返回undefined,后续触发hover事件调用setConnectorHover方法时,读取undefined的属性抛出异常 - 端点配置缺失
connectorPaintStyle、connectorHoverStyle等连接器必要样式参数,导致连接器初始化异常 - Bezier连接器的配置格式不符合当前jsPlumb版本要求,初始化失败
解决方案
- 首先将Bezier连接器注册到你的jsPlumb实例,示例代码如下:
import { newInstance } from '@jsplumb/browser-ui' import { BezierConnector } from '@jsplumb/connector-bezier' // 初始化jsPlumb实例 const jsPlumbInstance = newInstance({ container: "your-container-id" // 替换为你的画布容器ID }) // 注册Bezier连接器,必须执行该步骤实例才能识别Bezier类型 jsPlumbInstance.registerConnectors(BezierConnector)
- 补全
addEndpoint方法的配置参数,增加连接器相关样式配置:
import { DotEndpoint } from '@jsplumb/core' const endPointConfig = { endpoint: { type: DotEndpoint.type, options:{ radius: 7 } }, paintStyle: { fill: '#99cb3a' }, // 可选:配置端点hover样式 hoverPaintStyle: { fill: '#b2e04a' }, source: true, // 新增连接器默认样式 connectorPaintStyle: { stroke: '#99cb3a', strokeWidth: 2, outlineStroke: 'transparent', outlineWidth: 4 }, // 新增连接器hover样式,匹配setConnectorHover方法的调用要求 connectorHoverStyle: { stroke: '#b2e04a', strokeWidth: 3 }, connector:{ type: BezierConnector.type, options:{ curviness: 50 } }, }
- 若修改后仍然报错,可以尝试将connector配置改为数组格式,适配部分版本的格式要求:
connector: [BezierConnector.type, { curviness: 50 }]
补充说明:在React、Vue等框架环境中使用时,需要确保调用
addEndpoint方法时,目标DOM元素已经完成挂载,否则端点挂载失败也会触发同类属性读取异常。
内容的提问来源于stack exchange,提问作者Kamya Kashyap
相关产品推荐
相关产品推荐

