D3.js键功能在简单的选择器/数组组合上运行两次
D3.js key function running twice on simple selector/array combo
学习 d3 当我创建一个简单的数字数组时,然后尝试将数据绑定到一组简单的元素,但使用 key 函数,它会在循环中运行两次。 第一次通过,它告诉我数组的值是未定义的。 第二次通过它们可用。
这是 html:
<div class="testBind"></div>
<div class="testBind"></div>
<div class="testBind"></div>
这是js:
var numbers = [1, 2, 3];
function whichNumber(n){
console.log('n----:' + n);
return n;
}
var testKeyFunction = d3.selectAll("div.testBind").data(numbers, whichNumber);
当我运行这个时,我得到:
n----:undefined
n----:undefined
n----:undefined
n----:1
n----:2
n----:3
这是一个小提琴手:http://jsfiddle.net/5f8mo2sa/3/
这是一个问题(除了 wtf(的原因是,当数据是对象数组并且我尝试引用函数中的键时,它会抛出一个未定义的错误。
从 d3 帮助:
可以指定一个键函数来控制数据如何连接到元素。这将替换默认的按索引行为;关键function is invoked once for each element in the new data array, and once again for each existing element in the selection
.在这两种情况下,键函数都传递基准面 d 和索引 i。当对新数据元素计算键函数时,this 上下文是数据数组;在现有选择上计算键函数时,此上下文是关联的 DOM 元素。
您在第一个循环中看到的是遍历现有数据(没有(,然后是新数据数组(具有您期望的值(。如果你的键功能依赖于一个对象,你需要先做一个检查,以确保对象存在。
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- 根据id将json数组组合为一个json数组
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- 接受不在列表中的值-引导组合框
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 在单独加载时运行良好的组合javascript中可能导致错误的原因
- jQuery 运行函数组合框填充多个组合框
- D3.js键功能在简单的选择器/数组组合上运行两次
- 使用组合框填充另一个组合框,以便用户可以运行查询
- 循环遍历数组中的字符,对于每个可能的3个字符的组合运行代码
- 设置extjs 6组合框's在运行时存储数据会导致显示错误
- 在Ext JS中更改运行时组合框的外观
- 如何运行这个html组合框样例
- 如何组合两个相似的脚本,并在略有变化的情况下运行它