Вопрос по d3.js – Наследование в соединениях данных

8

Быстрый вопрос о присоединении данных. Скажем, у меня есть некоторые элементы, каждый из которых содержит. Когда я первоначально присоединяю данные к, они автоматически наследуются элементами, которые я добавляю в выбор ввода.

Когда данные меняются, и я перепривязываю их, я ожидал, что элементы получат новые данные, но этого не произошло.

Чтобы справиться с этим, мне нужно было явно перепривязать данные на более низком уровне следующим образом:

<code>gElements.selectAll("circle")
    .data(function(d) { return [d]; }
    .enter().append("circle");
</code>

Это обрабатывает как случай создания, так и последующую повторную привязку. Но это кажется излишним, поскольку возвращение [d], по сути, происходит автоматически при начальном наследовании данных от родительского элемента.

Правильный ли это подход, или я запутался где-то здесь?

Ваш Ответ

1   ответ
17

selection.data, он обновляет данные, связанные с этими элементами. Тем не менее, это делаетnot автоматически распространять новые данные на потомки элементов; ты должен сделать это сам.

Когда вы звонитеselection.select, который является аналогомselection.append, данные от родителя привязаны к выбранному дочернему элементу для каждого выбранного элемента. Когда вы звонитеselection.selectAllданные не связаны, поэтому вы должны впоследствии вызвать selection.data, чтобы связать новые данные с дочерними элементами.

Трудно ответить на ваш вопрос, не видя больше контекста. Если вы обновили данные наgElementsи каждый элемент G содержит один круг, вы можете распространять данные из родительского G в дочерний круг, используя selection.select:

gElements.select("circle");

Написанный вами фрагмент кода будет использоваться только в том случае, если вы хотите создать один новый круг, если этот круг отсутствует. Это описано вМышление с Joins, Точный код, который вы напишите, может зависеть от того, будет ли он выполняться при вводе и обновлении, или только при обновлении.

Да, вы правы, у меня только 1 круг на & gt; g & gt ;. Я не осознавал, что select вызвал наследование данных, но я вижу в документации, что это действительно говорит об этом. Я нахожу это немного нелогичным, поскольку я всегда думал о процессе выбора как о операции только для чтения, но этот единственный случай фактически вызывает изменение узла. Scott Cameron

Похожие вопросы