GoJS从v1.7.14升级到v2.2.17后双击编辑节点名称报错
GoJS v1.7升级到v2.2后双击编辑节点名称失效的解决思路
核心原因分析
错误TypeError: c.show is not a function指向GoJS编辑器激活逻辑,本质是v2.x对文本编辑API做了破坏性重构,v1.x的自定义编辑器配置或模板写法在v2.x中不再兼容。
具体解决步骤
检查节点模板的文本编辑配置
v1.x中通常通过设置TextBlock.editor指定编辑器:// v1.x 旧写法 $(go.TextBlock, { editor: new MyCustomEditor(), // 自定义编辑器实例 editable: true })v2.x中已移除
TextBlock.editor属性,改用textEditor,且默认内置编辑器无需手动实例化,只需开启editable:// v2.x 正确写法 $(go.TextBlock, { editable: true, textEditor: new go.TextEditor() // 如需自定义,基于官方TextEditor基类扩展 })适配自定义文本编辑器API
如果之前实现了自定义编辑器,v2.x要求编辑器类需实现TextEditor接口,核心激活方法从show改为activate。原自定义编辑器的show逻辑需迁移:class MyCustomEditor extends go.TextEditor { activate(textBlock, reason) { // 替代原show方法的激活逻辑 // 处理文本编辑框的显示、内容填充、焦点获取等操作 } }移除旧版兼容代码
若代码中存在手动调用editor.show()的逻辑,需全部替换为v2.x的textEditor.activate()方式,避免调用已废弃的show方法。验证Angular环境的Zone.js交互
错误堆栈包含Zone.js调用,若在Angular项目中,可尝试将GoJS编辑器初始化逻辑包裹在NgZone.runOutsideAngular中,避免Zone.js干扰GoJS的DOM操作:this.ngZone.runOutsideAngular(() => { // 图表或编辑器相关初始化逻辑 });
内容的提问来源于stack exchange,提问作者Roohi
相关产品推荐
相关产品推荐

