作爲較大項目的一部分,我想從點擊處理程序中更新SVG行的屬性,然後在回調中仍然使用該屬性。我是d3的新手,對javascript沒有太多的經驗,所以我懷疑我可能對這種語言的工作原理有一些基本的誤解。d3js使用在同一個回調中更新的屬性
我蒸餾水它歸結爲一個簡單的例子:
var lines = [
{ "x1": 50, "y1": 50, "x2": 350, "y2": 150 },
{ "x1": 50, "y1": 150, "x2": 350, "y2": 50 }
];
var svg = d3.select("body")
.append("svg")
.attr("width", 400)
.attr("height", 200);
var lines = svg.selectAll("line")
.data(lines)
.enter().append("line")
.attr("x1", function(d){return d.x1;})
.attr("y1", function(d){return d.y1;})
.attr("x2", function(d){return d.x2;})
.attr("y2", function(d){return d.y2;})
.attr("stroke-width", 2)
.attr("stroke", "#00b000");
lines.on("click", function() {
svg.selectAll("line")
.attr("val", 10);
svg.selectAll("line")
.attr("stroke", "#b000b0")
.attr("stroke-width", function(d) { return d.val; });
});
我已經創造了它在jsfiddle證明。
在點擊處理程序中,我正在更新「val」屬性,然後嘗試使用該屬性來設置筆畫寬度。我的期望是,當點擊線條時,筆觸寬度將變爲10,但相反它似乎變爲1.
有沒有辦法使這項工作?我明白,在這個簡單的例子中,我可以直接將筆畫寬度設置爲10,但我想了解爲什麼我不能在該函數中使用val屬性。
此外,任何部分的更好風格的建議是受歡迎的。
這個回答這個問題的精確解。非常感謝你!這實際上有助於我理解d3。 –