#javascript #d3.js
#javascript #d3.js
Вопрос:
Я хочу иметь возможность переключаться между двумя наборами данных с помощью D3.js. Когда я переключаюсь, я хочу, чтобы старый набор данных исчезал, в то же время новый набор данных исчезает.
Я уже некоторое время работаю над этим кодом, но я не получаю желаемого поведения. Найдите следующую скрипку и попробуйте щелкнуть по текстовым наборам данных1 и наборам2.
Например, когда я сначала нажимаю Dataset1, все работает нормально, но когда я позже нажимаю Dataset2, я не получаю все значения Dataset2. Если я сейчас снова нажму Dataset1, ничего не произойдет, и мне придется дублировать щелчок, чтобы все заработало. Также мне никогда не удается отобразить все девять элементов Dataset2.
Чего мне не хватает?
var dataset1 = [1,2,3,4],
dataset2 = [1,2,3,4,5,6,7,8,9],
svg = d3.select("body").append("svg");
update = function(newDataset){
var allArrows = svg.selectAll(".arrow"),
addNew;
addNew = function (){
allArrows
.data(newDataset)
.enter()
.append("line")
.attr({
opacity : 0,
"stroke-width" : 1,
stroke : "blue",
class : "arrow",
x1 : 10,
y1 : function (d, i) { return 10 * i 10 },
x2 : 50,
y2 : function (d, i) { return 10 * i 10}
})
.transition()
.duration(500)
.attr({
opacity : 1
});
});
if ( !allArrows.empty() ) {
allArrows
.data([])
.exit()
.transition()
.duration(500)
.attr("opacity", 0);
.remove();
addNew();
}
else {
addNew();
}
return chart;
};
Комментарии:
1. Ваш jsfiddle у меня не работает.
2. Нет, вы правы, не знаете, почему это так? Он отлично работает в моем локальном браузере Chrome. Сейчас я обновил код, поэтому попробуйте еще раз, иначе посмотрите, работает ли он в вашей локальной системе…
3. Причина, по которой остаются элементы, заключается в переходе, который вы используете при выходе из данных. Код для добавления новых строк учитывает их и, следовательно, добавляет меньше, чем вы ожидали. Он отлично работает без перехода: jsfiddle.net/pWqLL/2
4. да, но почему это? Странно, что я пытался всеми способами удалить старые элементы перед добавлением новых один раз, но я просто не могу заставить их исчезнуть.
5. Это потому, что они не удаляются немедленно (только в конце перехода), но вы запускаете код для немедленного добавления новых элементов. В вашем коде вы даже сохраняете сделанный ранее выбор.