2013-07-08 4 views
1

이 없다하지만 난 오류가 계속 :D3 힘 지시 그래프 노드는 내가 <a href="http://hughsk.github.io/colony/" rel="nofollow">http://hughsk.github.io/colony/</a>에서 불통 코드를 사용하고 어떤 속성 "무게"

이것은 force.nodes에서 유래

Uncaught TypeError: Cannot read property 'weight' of undefined

(노드) 함수를 들어 이 문서에서는 start()가 생성 될 때 레이아웃에 의해 기본값이 초기화되므로 무게를 설정할 필요가 없다고 말합니다.

체중 값이 초기화되지 않도록 내가 잘못하고있는 것을 누군가가 볼 수 있습니까? tick에,

links.forEach(function (link) { 
    //var source, target; 
    for (var i = 0; i < nodes.length; i++) { 
     if (nodes[i].pages == link.source) { 
      link.source = nodes[i]; 
     } 
    } 


    for (var i = 0; i < nodes.length; i++) { 
     if (nodes[i].pages == link.target) { 
      link.target = nodes[i]; 
     } 
    } 

    link.source.children = link.source.children || [] 
    link.source.children.push(link.target) 

    link.target.parents = link.target.parents || [] 
    link.target.parents.push(link.source) 
    return link; 
}) 

다음 :

var colony = { 
    "nodes":[ 
    { 
     "pages":123, 
     "name":"Test", 
     "id":2 
    }, 
    { 
     "pages":456, 
     "name":"Test2", 
     "id":3 
    } 
    ], 
    "links":[ 
    { 
     "source":123, 
     "target":456, 
     "weight":100 
    } 
    ] 
} 

var nodes = colony.nodes 
    , links = colony.links 
    , scale = 1 
    , focus 

var width = 960 
    , height = 960 
    , link 
    , node 
    , text 
    , textTarget = false 

var colors = { 
     links: 'FAFAFA' 
    , text: { 
     subtitle: 'FAFAFA' 
    } 
    , nodes: { 
     method: function(d) { 
      return groups[d.group].color 
     } 
     , hover: 'FAFAFA' 
     , dep: '252929' 
    } 
} 

links.forEach(function(link) { 
    var source = function(nodes,link){ 
     for (var i = 0; i < nodes.length; i++){ 
      if (nodes[i].id == link.source){ 
       return nodes[i]; 
      } 
     } 
    } 
     , target = function(nodes,link){ 
     for (var i = 0; i < nodes.length; i++){ 
      if (nodes[i].id == link.target){ 
       return nodes[i]; 
      } 
     } 
    } 

    source.children = source.children || [] 
    source.children.push(link.target) 

    target.parents = target.parents || [] 
    target.parents.push(link.source) 
}) 

var groups = nodes.reduce(function(groups, file) { 
    var group = file.mgroup || 'none' 
     , index = groups.indexOf(group) 

    if (index === -1) { 
     index = groups.length 
     groups.push(group) 
    } 

    file.group = index 

    return groups 
}, []) 

groups = groups.map(function(name, n) { 
    var color = d3.hsl(n/groups.length * 300, 0.7, 0.725) 

    return { 
      name: name 
     , color: color.toString() 
    }; 
}) 

var force = d3.layout.force() 
    .size([width, height]) 
    .charge(-50 * scale) 
    .linkDistance(20 * scale) 
    .on('tick', function() { 
     link.attr('x1', function(d) { return d.source.x; }) 
      .attr('y1', function(d) { return d.source.y; }) 
      .attr('x2', function(d) { return d.target.x; }) 
      .attr('y2', function(d) { return d.target.y; }) 

     node.attr('cx', function(d) { return d.x; }) 
      .attr('cy', function(d) { return d.y; }) 

     if (textTarget) { 
      text.attr('transform' 
        , 'translate(' + textTarget.x + ',' + textTarget.y + ')') 
     } 
    }) 

var vis = d3.select('body') 
    .append('svg') 
    .attr('width', width) 
    .attr('height', height) 

force.nodes(nodes) 
    .links(links) 
    .start() 
+1

오류는 '체중'이 누락되었음을 나타내지 않습니다. 오히려, 그것은 'weight'매개 변수를 가져야하는 무언가가 완전히 정의되지 않았 음을 나타냅니다. 나는 비록 무엇을 말할 수 없습니다. – meetamit

+0

이런 종류의 디버깅 질문에서는 jsFiddle을 제공하는 것이 좋습니다. –

+0

@ChristopherChiche http://jsfiddle.net/xymay/ 그게 도움이되는지는 모르지만 실제로는 나타나지 않습니다. 그러나 거기에 그것은 – user2562348

답변

1

귀하의 주요 문제는 당신이 당신에게 뭔가를주는 forEach 루프에있는 링크를 수정해야한다는 것입니다 : 여기

내 코드입니다 함수 인 경우 모두 linksnodes에 대해서도 반복해야합니다. 좋은 예를 찾을 수 있습니다. documentation

관련 문제