2014-10-27 6 views
0

Я пытаюсь обновить график, основанный на некотором динамическом вводе данных/пользователя на странице. Поскольку данные просто помещаются в столбцы столбцов столбцов и не нуждаются в перемещении, я не думаю, что мне нужна анимация. Просто нужно удалить текущий текст и заменить его новыми значениями.Удалить текст через D3

Код, приведенный ниже, был моим лучшим предположением, однако, похоже, это не делает трюк. .append() отлично работает, однако он просто накладывает новый текст поверх старого, и в итоге он становится нечитаемым (очевидно). Похоже, что это .remove(), что я использую неправильно.

Относительно новичок в D3.js, так что если есть лучший способ, у любого есть какие-либо подсказки/советы, которые они будут оценены.

EDITED на комментарии

 //Remove the old text 
     this.options.barDemo.selectAll("text.eoyValue") 
      .data(data) 
      .exit().remove(); 

     //Replace with the new text   
     this.options.barDemo.selectAll("text.eoyValue") 
      .data(data) 
      .enter().append("svg:text") 
      .attr("x", function(d, i) { return x(i + .35) + barWidth; }) 
      .attr("y", height - 10) 
      .attr("dx", -barWidth/2) 
      .attr("dy", "15px") 
      .attr("text-anchor", "middle") 
      .attr("style", "font-size: 12; font-family; Helvetica, sans-serif") 
      .text(function(d) { 
       console.log(d.attributes.contract); 
       return d.attributes.contract; 
      }) 
      .attr("transform", "translate(0, 18)") 
      .attr("class", "eoyValue"); 
+1

Похоже, что вы никогда не добавляя класс 'eoyValue', так' barDemo.selectAll ("text.eoyValue") 'всегда будет пустым. –

+0

Спасибо, добавлено в сообщение. К сожалению, я столкнулся с аналогичной проблемой в том, что вызов '.remove()' все еще не подбирает ничего, и теперь вызов '.append()' не записывает никаких новых значений, они все застряли в '0,00' то есть, когда страница загружается. – NealR

+0

Если я помещаю 'console.log()' в функцию '.text()', я вижу, что вызов '.append()' срабатывает только при загрузке страницы. Отладчик Chrome показывает блок кода, оцененный при изменении значений, однако 'console.log()' никогда не работает. – NealR

ответ

0

Так на вершине, не добавляя имя класса я также не вызывая метод transition(). Приведенный ниже код решил проблему.

 this.options.barDemo.selectAll("text.eoyValue") 
      .data(data) 
      .enter().append("svg:text") 
      .attr("x", function(d, i) { return x(i + .35) + barWidth; }) 
      .attr("y", height - 10) 
      .attr("dx", -barWidth/2) 
      .attr("dy", "15px") 
      .attr("text-anchor", "middle") 
      .attr("style", "font-size: 12; font-family; Helvetica, sans-serif") 
      .text(function(d) { return d.attributes.contract; }) 
      .attr("transform", "translate(0, 18)") 
      .attr("class", "eoyValue"); 


     var columnBaseText = this.options.barDemo.selectAll("text.eoyValue").data(data, function (d, i) { 
      console.log(i); 
      return i; 
     }); 

     columnBaseText.transition() 
      .duration(1100) 
      .attr("y", height-10) 
      .text(function (d) { 
       return d.attributes.contract; 
      }); 
Смежные вопросы