未捕获的类型错误:无法读取 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 的属性“样式”