d3.js enter()未正确绑定到数据-正在重新创建现有数据
d3.js enter() not binding to data correctly - re-creating existing data
我有一个奇怪的问题,enter()
选择无法检测到已经存在的元素。每次调用enter()
时,它都会重新创建相同的元素,并且不会删除任何元素。
怎么了?
clusters = [
{ "clusternumber": 9, "value": "blah1"},
{ "clusternumber": 10, "value": "blah2"},
];
function redraw()
{
var cluster = clusterView.selectAll(".cluster")
.data(clusters, function(d) {return d.clusternumber; });
//
// Clusters entering the view
//
var clusterEnter = cluster.enter()
.insert("div", ".cluster");
//
// Clusters to update
//
var clusterUpdate = d3.transition(cluster)
.style("fill-opacity", 1);
//
// Clusters to remove
//
var clusterExit = d3.transition(cluster.exit())
.style("fill-opacity", 0)
.remove();
}
EDIT:JSFiddle here:update()被调用两次,DOM对象被生成两次。这一定是我忽略的一件简单的事情!
编辑:完整代码位于http://maxhunter.me/clusterviewd3.html如果你在乎。。。
原来这有点傻:
.insert("div", ".cluster");
实际上并没有在类cluster
中创建div。
替换为:
.insert("div")
.attr("class", "cluster")
解决了问题!
相关文章:
- 从json对象聚集数据并创建层次结构
- 使用JSTree上下文菜单捕获新创建的节点
- 如何在新创建的模块中从Odoo v8中的Javascript文件中调用python函数
- 更新脚本以针对具有递增 ID 的新创建的表行运行
- 在返回的 JSON 数据上创建 href
- 在 d3 中为数据列表创建元素
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- 访问新创建的Facebook事件返回false
- 如何根据数据动态创建引导下拉列表
- 新创建的按钮(通过createElement(“button”))激活自身.如何阻止这种情况
- jQuery:如何将事件附加到类内新创建的元素
- 角度1:为新创建的对象添加新ID
- 从指定的字符串中读取数据以创建选择元素
- jQuery绑定ajax:成功地不在rails3app中为新创建的(ajax)项工作
- 如何通过从angularjs中的现有对象中选择一些数据来创建新对象
- 如何设置新创建的 DOM 元素的 HTML 内容
- 使用DOM中定义的html5数据属性创建新元素
- 在新创建的模型哈希中缺少烬数据映射
- 从JS配置对象中提取数据以创建新对象
- 将新创建的对象推入javascript数组将覆盖先前数据的某些部分