2015-02-14 2 views
1

Я не могу обернуть голову вокруг оператора выбора D3.Использование D3 'select' и 'selectAll'

При создании графика, вы, как правило, сделать что-то вроде этого:

svg.selectAll("rect") 
    .data(my_graph_data) 
    .enter() 
    .append("rect") 
    ..//etc. 

То, что я не понимаю, является SelectAll. На данный момент нет элемента для выбора! Элементы добавляются позже только на основе данных.

Должен ли я читать эти инструкции D3 справа налево? В этом случае, зачем мне нужно выбирать элементы?

ответ

5

Вам необходимо выбрать (несуществующие) элементы из-за последующего вызова .data(). Этот вызов указывает D3 сопоставить данные, указанные в аргументе, с выбранными вами элементами. Если, как и в вашем случае, выбор пуст, D3 создаст элементы-заполнители для всех из них - выбор ввода. Затем этот выбор можно использовать, как и вы, для добавления новых элементов.

Этот шаблон .selectAll(...).data(...) совместим, независимо от того, что у вас есть в вашем SVG. Пока вы обрабатываете все три (ввод, обновление, выход), он всегда будет делать ожидаемую вещь. При первоначальном выборе не может быть элементов, элементов для всех данных или где-то посередине.

Технически вы не имеете для использования этого шаблона при первоначальном добавлении новых элементов, это просто делает код более согласованным. В частности, этот шаблон можно использовать в функции, которая будет обновлять SVG новыми данными независимо от их состояния (т. Е. Работает так же, как и при получении и отображении новых и измененных данных).

+0

Благодарим за объяснение. Я думаю, что это плохой выбор формулировки. Вы не можете «выбрать», что-то не существует. Синоним, такой как «create()», был бы более понятным. Конечно, тогда у вас возникнет проблема поиска нового термина для случая, когда существует сочетание выбора элементов и создания элементов. – reggie

+0

Я думаю, что это понятно - вы можете, конечно, выбрать то, чего не существует, вы просто ничего не получите. Например, я могу собрать набор всех единорогов, ничего не получится, но достиг моей цели. «Создать» на самом деле не распространяется, потому что это не то, что вы делаете - часть «создать» появляется только тогда, когда вы действуете на элементы ввода и добавляете элементы. –

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