Древовидная диаграмма: несколько на одной странице

Я пытаюсь разместить 2 древовидные диаграммы d3.js, как показано здесь http://bl.ocks.org/1249394 на одной странице. Оба дерева будут загружены разными данными из объектов Javascript. Первый появится через:

<div id="chart"></div>

и второе дерево будет загружено в:

<div id="chart2"></div>

И #chart, и #chart2 находятся на одной странице, причем первое дерево (#chart) отображается вверху страницы, а второе (#chart2) прямо под ним, так как именно так расположены элементы диаграммы. Для этого я дважды применил один и тот же код с http://bl.ocks.org/1249394. По одному на каждый элемент div, при этом единственное различие между двумя фрагментами кода заключается в расположении дерева, то есть дерева 1:#chart и дерева 2:#chart2.

Дерево 1:

var vis = d3.select("#chart").append("svg:svg")

Дерево 2:

var vis = d3.select("#chart2").append("svg:svg")

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

Как я могу это исправить?


person user1684586    schedule 23.09.2012    source источник


Ответы (1)


Вы перезаписываете переменную vis, когда рисуете второе дерево, от которого зависит взаимодействие. Если вы собираетесь создать несколько диаграмм, вам нужно создать замыкание, чтобы каждое дерево находилось в своей области. Так они не будут мешать друг другу.

Майк написал хороший пост о создании многоразовых диаграмм по адресу http://bost.ocks.org/mike/chart. /. Он проходит через создание замыкания и поверхностных свойств.

person Bill    schedule 23.09.2012