我收到此错误:
未捕获的类型错误:无法读取 null 的属性“ownerDocument”
这是来自设置的行.data()
到最近附加的元素d3
:
const someSet = someSelection.filter('.some:(filter)')
someSet.each((d, i, nodes) => {
const someElement = d3.select(nodes[i])
const someChild = someElement.append('g')
someChild.data(this.data) // <-- This line throws the error
.enter()
.append('circle')
.classed('some-class', true)
})
环顾四周我能找到的是有消息来源称,当相关元素尚未添加到页面时,他们遇到了此错误 https://github.com/metricsgraphics/metrics-graphics/issues/690,但我已确认在引发此错误时我的元素已添加到页面中。
事实证明,在将 .data() 添加到嵌套元素之前,我忘记添加新的空选择:
const someSet = someSelection.filter('.some:(filter)')
someSet.each((d, i, nodes) => {
const someElement = d3.select(nodes[i])
const someChild = someElement.append('g')
someChild.selectAll('circle.some-class') // added empty selection here
.data(this.data)
.enter()
.append('circle')
.classed('some-class', true)
})
如果我执行创建组、存储对组的引用、附加数据和附加等操作,然后尝试将新数据附加到参考组(<g>
)而不是小组内容的选择)。例如这将导致此错误:
const someObj = {} // or some class etc
const someSet = someSelection.filter('.some:(filter)')
someSet.each((d, i, nodes) => {
const someElement = d3.select(nodes[i])
const someChild = someElement.append('g')
someObj.someChild = someChild
someChild.selectAll('circle.some-class') // added empty selection here
.data(this.data)
.enter()
.append('circle')
.classed('some-class', true)
})
// ...do stuff
someObj.someChild.data(newData)
// Error because someObj.someChild is a D3 element, not a D3 selection
所以,最后应该是:
someObj.someChild.selectAll('circle.some-class').data(newData)
...或者存储的引用应该是选择数据被添加到。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)