0
根據文檔,如果數據更新,集合應該自行更新。例如,我有在陣列的兩個元件:更新數據時未更新d3js元素
[{name: "Tom", age:10}, {name: "Prank", age:12}]
並將該數據已經加入到下面的DOM元素
<div class="container">
<div class="el">Tom is 10 yrs old</div>
<div class="el">Prank is 12 yrs old</div>
</div>
並且數據被更新。
[{name: "Tom", age:20}, {name: "Prank", age:22}]
我想要的DOM是
<div class="container">
<div class="el">Tom is 20 yrs old</div>
<div class="el">Prank is 22 yrs old</div>
</div>
但由於元件的數量和數據的大小是一樣的,div元素似乎並沒有得到更新。我在這裏錯過了什麼嗎?上面的例子是我下面的代碼的簡化版本,但我相信理解如何正確地更新上面的例子將解決問題。
function draw(data) {
var bars = d3.select(".container")
.selectAll(".bar-wrapper")
.data(data);
var barEnter = bars
.enter()
.append("div")
.attr("class", "bar-wrapper")
barEnter
.append("button")
.text(function(d) { return "Vote "+ d.name; })
.attr("class", "vote-btn btn-default btn-primary")
.on("click", function(d) {
console.log("send Data", d.name);
sendData(d.name);
});
barEnter
.append("div")
.attr("class", "bar")
.style("width", function (d) {
return (d.vote*10) + "px";
})
.text(function(d) { return d.vote });
bars
.exit()
.remove()
};
任何幫助將不勝感激!
你不處理更新選擇 - 'bars.text(函數(d){回報d.vote});' – 2014-11-03 16:16:47
@LarsKotthoff你能否詳細說明更多?我必須根據更新的數據更改條的寬度和標籤。 – 2014-11-03 20:26:17
正如我所說 - 處理更新選擇。你需要運行你添加元素時運行的代碼,所以爲了改變寬度,也可以使用'.style(「width」,function(d){d.vote * 10)+「px 「; })'。 – 2014-11-03 21:53:39