未捕获的类型错误:无法读取 null 的属性“setThemingColor”

Posted

技术标签:

【中文标题】未捕获的类型错误:无法读取 null 的属性“setThemingColor”【英文标题】:Uncaught TypeError: Cannot read property 'setThemingColor' of null 【发布时间】:2019-08-12 11:15:29 【问题描述】:

我正在为 Forge Viewer 编写一个扩展,当我尝试在扩展的“加载”部分中使用 setThemingColor() 方法时遇到了这个问题:

function extensaoteste(viewer, options) 
    Autodesk.Viewing.Extension.call(this, viewer, options);
  

  extensaoteste.prototype = Object.create(Autodesk.Viewing.Extension.prototype);
  extensaoteste.prototype.constructor = extensaoteste;

extensaoteste.prototype.load = function() 
    this.onSelectionBinded = this.onSelectionEvent.bind(this);
    this.viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, this.onSelectionBinded);

    this.viewer.setThemingColor(3554,new THREE.Vector4(255/255, 255/255, 102/255, 1));

代码继续运行,但其余工作正常。如您所见,扩展的另一部分带有事件侦听器。

如果我在 extensaoteste.prototype.onSelectionEvent 中使用与 setThemingColor 方法完全相同的行,它会完美运行。我知道 this.viewer 部分没有返回任何内容,但它在上面的行中有效。

我使用https://forge.autodesk.com/en/docs/viewer/v6/tutorials/events/#step-2-listen-and-react-to-an-event的代码作为模板。

我知道这可能是一个愚蠢的问题,但我真的无法理解。感谢您的帮助!

【问题讨论】:

【参考方案1】:

发生这种情况是因为调用设置颜色时未完全加载模型几何图形,并且未在 this.viewer 上调用空引用,而是在模型对象上调用:

Viewer3D.prototype.setThemingColor = function(dbId, color, model, recursive) 
        // use default RenderModel by default
        model = model || this.model;

        model.setThemingColor(dbId, color, recursive); // null reference here

        // we changed the scene to apply theming => trigger re-render
        this.impl.invalidate(true);
    ;

GEOMETRY_LOADED_EVENT 被触发后尝试设置颜色(和其他片段级别的操作):

var viewer = this.viewer;
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT,()=>viewer.setThemingColor(3554,new THREE.Vector4(255/255, 255/255, 102/255, 1));

【讨论】:

非常有意义!非常感谢!

以上是关于未捕获的类型错误:无法读取 null 的属性“setThemingColor”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取 null 的属性“getContext”

为啥我会收到此错误:未捕获的类型错误:无法读取 null 的属性 'classList'

未捕获的类型错误:在输入单击时无法读取 null 的属性“样式”

如何修复未捕获的类型错误:无法读取 null 的属性“值”

未捕获的类型错误:无法读取 null 的属性“innerHTML”

未捕获的类型错误:无法在方法中读取 null 的属性“classList”