【发布时间】:2016-11-19 20:26:43
【问题描述】:
我在一个涉及交互式地图的项目中使用 d3.js。
为了测试,我只想触发一个函数来更改选择路径的填充值(这些代表房间轮廓)。
路径已经绘制在画布上。
路径 ID 值来自另一个系统。
我有 JSON 数据,我希望用来加入路径以更新其填充颜色。连接基于基于路径的 .attr("id") 的键值,这将等于传入 json 数据上的相同键值。
当我使用文件中本地的简单字符串测试数组启动函数时,它会按预期工作并更新 4 或 5 个路径的测试组的填充颜色。
但是,当我尝试使用我的 JSON 数据时,我无法获取要更新的路径。
有效的测试数组只是字符串:
var handleColorLink = [
["125E0", "red"],
["BC5AC", "orange"],
["BC417", "red"],
["B13D9", "orange"]
];
JSON 数据如下所示:
[{"handle":"BC5AD","mycolor":"blue"},
{"handle":"125F6","mycolor":"blue"},
{"handle":"171A7","mycolor":"blue"},
{"handle":"17235","mycolor":"blue"},
{"handle":"17236","mycolor":"blue"}]
我的预感是在 JSON 侧键(句柄)上找不到匹配项。
代码:
function TestFunction() {
d3.json("http://myjsonURL", function(data) {
d3.selectAll("path")
.datum(function(d) { return [d3.select(this).attr("id")]; })
.data(data, function(d) { return d.handle; }) //doesnt work
.style("fill", function(d) { return d.mycolor; }); //doesnt work
//.data(handleColorLink, function(d) { return d[0]; }) //works on string array
//.style("fill", function(d) { return d[1]; }); //works
});
}//end testfunction
任何帮助将不胜感激。
【问题讨论】:
-
可能是因为你通过return d.handle过滤数据,所以你只能访问句柄而不是整个数据对象
-
这个
.datum(function(d) { return [d3.select(this).attr("id")]; }).data(data, function(d) { return d.handle; })是非常奇怪的语法。你希望完成什么?你是如何生成路径的d属性的? -
路径已创建。用于创建路径的数据(d 值、id 值等)来自单独的数据流。我希望加载路径(代表平面图),然后我希望能够更改一些命名路径的填充颜色。我从网上某处获得了基准示例。不幸的是,我不知道 d3 的“奇怪”是什么。
标签: d3.js