2015-02-06 2 views
0

Я реализую реактивную линейную диаграмму в meteor.js на основе this example line chart. В коде, который я снял для этой диаграммы, у меня есть следующий блок, который отлично работает.Зачем нужно разделять последовательность методов?

var paths = svg.selectAll("path.line") 
    .data([dataset]); 

paths 
    .enter() 
    .append("path") 
    .attr("class", "line") 
    .attr('d', line); 

paths 
    .attr('d', line); 

paths 
    .exit() 
    .remove(); 

Однако, когда я пытаюсь написать что-то вроде следующего, оси все еще отображаются, но путь не отображается. Почему это может быть так?

var paths = svg.selectAll("path.line") 
     .data([dataset]) 
    .enter() 
     .append("path") 
     .attr("class", "line") 
     .attr('d', line) 
    .exit() 
     .remove(); 
+0

Возможно, во втором случае, когда вы помещаете attr ('d', line) .attr ("d ', line), второй' d 'перезаписывает первый, где, как и в первом случае, вы это сделали добавьте его. Попробуйте разбить их и посмотреть, работает ли он – rekoDolph

+0

. Это часть в первом тоже, хотя ... – Goodword

ответ

2

Это потому, что вы вызываете функции на разных объектах. D3 возвращает обновление, ввод и выход из вызовов на .data() - это то, что вы храните в paths в первом блоке кода. Затем вы получаете ввод, обновление и выход из них и обрабатываете их.

Во втором блоке кода вы вызываете .enter(), после чего вы обрабатываете ввод. То есть весь код после .enter() применяется к выбору ввода, а не к другим выборам, а также до.

Так .exit().remove() вызывается на вновь прилагаемыми path элементов (которые должны дать вам ошибку) вместо возвращаемого значения .data() как в первом блоке кода.

+0

Итак, это как вилка? Также, что делает строка 'paths.attr ('d' , line) 'act on? – Goodword

+0

Нет, каждый из вызовов' .function' работает с возвращаемым значением предыдущей операции. Это означает, что вещь, в которой вы работаете, может меняться по всей цепочке, что и происходит в вашей второй блок кода. 'paths.attr ('d', line)' в вашем первом кодовом блоке работает с выбором обновления (нет никакой отдельной функции, чтобы позвонить, чтобы добраться до этого). –

Смежные вопросы