Перебор узлов X3DOM в d3.js

Я пытаюсь перебрать узлы X3DOM в D3.js, но получаю сообщение об ошибке.

Вот код:

  var disktransform = scene.selectAll('.disktransform');
  var shape = disktransform
                  .datum(slices)
                  .selectAll('.shape')
                  .data(partition.nodes)
            .enter()
            .append('shape')
                    .attr('class', 'shape')
                    .attr('data-name', function(d, i) { return d.name + ' ' + i; })

  shape
            .append('appearance')
            .append('material')
                    .attr('diffuseColor', function (d, i) { return color(d.name); })
    ;
  d3.selectAll('shape.shape').each(function (d) { console.log(d); d.node().addEventListener('click', function (event) { alert('key'); alert(d.attr('data-name')); }); });

и вот ошибка. Как видите, он пытается использовать HTMLUnknownElement.node(). Как заставить приведенный выше код работать с X3DOM?

TypeError: d.node is not a function
    at HTMLUnknownElement.<anonymous> (cross_chart.js:136)
    at d3.js:962
    at d3_selection_each (d3.js:968)
    at Array.d3_selectionPrototype.each (d3.js:961)
    at CrossChart.addPath (cross_chart.js:136)
    at HTMLDivElement.<anonymous> (cross_chart.js:263)
    at d3.js:962
    at d3_selection_each (d3.js:968)
    at Array.d3_selectionPrototype.each (d3.js:961)
    at Array.CrossChart.draw (cross_chart.js:196)
    (anonymous function) @ angular.js:10126
    $get @ angular.js:7398
    $get.Scope.$digest @ angular.js:12669
    $get.Scope.$apply @ angular.js:12915
    done @ angular.js:8450
    completeRequest @ angular.js:8664
    xhr.onreadystatechange @ angular.js:8603

person John Carlson    schedule 29.08.2015    source источник
comment
Я также заменил d на это в каждой функции, но не повезло.   -  person John Carlson    schedule 29.08.2015
comment
Хотя у меня нет доступа к вашему коду, чтобы подтвердить проблему, у меня есть 2 предложения: - используйте x3dom.reload(), чтобы убедиться, что DOM правильно обновлен - используйте d3.select('x3d').node() .runtime.shootRay(x, y) по кликам для идентификации целевых объектов   -  person Fabian Dubois    schedule 19.11.2015


Ответы (1)


Так должно быть

d3.selectAll('shape.shape').each(function (d) { console.log(d); d3.select(this).node().addEventListener('click', function (event) { alert('key'); alert(d3.select(this).attr('data-name')); }); });
person Jegan    schedule 25.04.2016