我将数据与元素绑定

首先,我选择我的元素

let trainSelect = svg.selectAll('.train-w-dir');


当我console.log(trainSelect)我得到的元素不是空的

然后我绑定数据

trainSelect
        .data(schedules, function(d: ISchedule) {
          return d.train;
        })
        .enter()
        .on('mouseover', tip.show)
        .on('mouseout', tip.hide);


我在包含对象数组的调试器上检查计划。
但是在键函数d id undefined中,我不知道为什么?

所以我得到错误Cannot read property 'train' of undefined

最佳答案

键功能被评估两次:每个选择的元素一次,每个数据一次。用docs(强调我)的话:


  依次为每个选定元素评估此关键函数,依次传递当前数据(d),当前索引(i)和当前组(节点),并将其作为当前DOM元素(nodes [i]) ;返回的字符串是元素的键。然后,还会针对数据中的每个新基准,评估关键功能,并传递当前基准(d),当前索引(i)和组的新数据,以此作为组的父DOM元素;返回的字符串是基准的键。


在第一次运行中,如果尚未将数据绑定到元素,则对每个选定元素进行评估时d将是不确定的。

从您提供的代码尚不清楚什么可能是解决问题的最佳方法。您可以提供安全保护措施以防止键函数中的未定义值,或者可能更好地重建将数据绑定到元素的方式。

相关:Join existing elements of the DOM to data with d3.js

10-07 14:44