You need to enable JavaScript to run this app. Autodesk Forge Viewer v7 展示两套独立标记标签集的报错问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Autodesk Forge Viewer v7 展示两套独立标记标签集的报错问题咨询

报错根因

核心问题出在标签DOM的查询范围没有做专属类名隔离,导致多实例下跨实例读取非当前扩展维护的标签数据:

  • 两套标签扩展各自创建的标签DOM,都会携带通用的update类名
  • 通用的updateLabels方法执行DOM查询时,使用的选择器仅匹配通用的.update类,会把两套标签集的所有标签全部查询出来
  • 查询到不属于当前扩展实例的标签时,会提取该标签的dbId,去当前实例独立维护的this.frags映射表中查找对应值
  • 由于this.frags仅存储当前标签集的dbId与对应片段ID的映射,其他标签集的dbId在映射表中不存在,取值为undefined
  • 进入getBoundingBox方法后,直接对undefined做可迭代遍历,触发is not iterable类型错误
代码附带的其他潜在问题
  • DOM查询未加专属类过滤的问题,在cleanup、showLabels、updateLabels三个方法中都存在
  • 初始化绑定的viewer全局事件没有在cleanup阶段解绑,多实例下会触发重复回调
  • 添加按钮时操作的控件组ID为dataGrp,但cleanup中移除按钮时写的是dataGroup,存在拼写错误会导致按钮移除失败
  • this.frags使用数组类型存储键值映射,语义上更适合使用普通对象,避免数组原型链上的属性对映射值造成干扰
  • updateLabels方法中拼接display样式时,末尾多了一个右括号,会导致样式语法错误,标签的显隐状态无法正常应用
修复步骤
  1. 修正所有标签DOM查询的选择器,增加当前扩展专属dataClass类名过滤,确保查询范围仅覆盖当前标签集创建的DOM元素
    • 原updateLabels方法中无过滤的查询:
    for(const label of FindAll(`#${this.viewer.clientContainer.id} div.adsk-viewing-viewer .update`))
    
    • 修正为带类过滤的查询:
    for(const label of FindAll(`#${this.viewer.clientContainer.id} div.adsk-viewing-viewer label.data.${this.dataClass}.update`))
    
    • 同步修正showLabels、cleanup方法中对应的DOM查询逻辑,保持一致的过滤规则
  2. 在getBoundingBox方法中增加空值校验,避免对非数组类型的值做遍历:
    getBoundingBox(dbId) {
        var fragList = this.viewer.model.getFragmentList();
        const nodebBox = new THREE.Box3()
        const fragArray = this.frags["dbId" + dbId]
        // 无有效片段数据时直接返回空包围盒
        if(!Array.isArray(fragArray)) return nodebBox
        
        for(const fragId of fragArray){
            const fragBBox = new THREE.Box3();
            fragList.getWorldBounds(fragId, fragBBox);
            nodebBox.union(fragBBox);
        }
        return nodebBox
    }
    
  3. 修正cleanup中的控件组ID拼写错误,与init阶段的操作保持一致,确保按钮可以正常从工具栏移除
  4. 在cleanup阶段统一解绑init时绑定的viewer全局事件、标签点击事件,避免多实例下的内存泄漏和重复回调

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 11:45:04