我在這一個瘋狂......
第一次調用時,refreshGraph()完美工作:顯示我的圖形。
在下面的調用中,沒有任何反應。 selectAll()按照預期返回一個數組數組,,但是我的圖不會改變。
但是...如果我使用select()而不是selectAll(),它的工作原理!
AND WORST ...如果我在join.selectAll(「.bar」)之前添加了join.select(「.bar」),它也可以工作!selectAll只能在D3中運行一次
任何人都可以解釋我爲什麼?
我不明白這種行爲。我完全理解select()和selectAll()會返回什麼。在兩個返回的子集上調用style()應該給出相同的結果,因爲數據是相同的,即使按組按selectAll組織並且使用select保持平坦。我對嗎 ?
var srcData = [4, 8, 15, 16, 23, 42];
x = d3.scale.linear().domain([0, 42]).range([0, 420]);
function refreshGraph() {
join = d3.select(".chart").selectAll(".container").data(srcData);
join.enter()
.append("span").attr("class","container")
.append("div").attr("class","bar");
join
.selectAll(".bar") // wont work, but will if select() instead of selectAll()
.style("width", function(d) {
return x(d) + "px";
});
}
function doChange() {
for (var i = 0; i < srcData.length; i++) {
srcData[i] /= 2;
}
refreshGraph();
}
refreshGraph();
但我refreshGraph()與d3.select( 「圖 」)開始。全選(「 容器」)。數據(srcData)。每次調用函數時,數據都會被綁定到.container元素。然後通過join.enter()添加缺失的節點,但樣式尚未應用。它應該由join.selectAll(「酒吧」)...這意味着設置‘您可以通過.container所有的.bar歸類元素(連接選擇),並應用這種風格’。另外,它將使用select()!爲什麼? – user3173982
.select()將父數據綁定到子級。但它只是一個單元素選擇,所以在這種情況下它不會起作用。 – nrabinowitz