2016-07-26 6 views
0
나는 다음과 같은

자바 스크립트 catch되지 않은 참조

 for(var i =0;i<6;i++){ 
      setTimeout(function(){ 
      var in = data[0][i]; 
      slate(" + margin.left + "," + margin.top + ")"); 
      var svg = d3.select("#clustering").append("svg") 
        .attr("width", width + margin.left + margin.right) 
        .attr("height", height + margin.top + margin.bottom) 
        .append("g") 
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 
      svg.append("rect") 
        .attr("width", width) 
        .attr("height", height); 

      svg.append("g") 
        .attr("class", "x axis") 
        .attr("transform", "translate(0," + height + ")") 
        .call(xAxis); 

      svg.append("g") 
        .attr("class", "y axis") 
        .call(yAxis); 

      var color = d3.scale.category10(); 
      refreshGraph(); 
       },1000); 
      } 
     /* 
     * function displaying data on svg 
     * called every time data change 
     */ 
     var refreshGraph = function(){ 

      // removing all previously drawn dots 
      svg.selectAll(".dot") 
      .data(instruments) 
      .exit() 
      .remove(); 
      } 

같은 것을 쓴하지만 Uncaught Reference Error: svg is not defined 내가 아는이 오류가 발생했습니다, 그래서 내가 데이터 시각화를 만들기 위해 d3.js를 사용하고 있지만이 자바 스크립트 프로그래머 아니다

refreshGraph 함수는 var svg을 볼 수 없지만이 문제를 해결하는 방법을 모르겠습니다. 도움 주셔서 감사합니다.

+0

루프에서 나는 당신이 변수를 사용하여 익명 함수로 만들 필요가 있다고 생각합니다. 비슷한 문제가 있었지만 d3이 없었습니다 – Riddell

+2

"refreshGraph 함수가 var svg를 볼 수 없음을 알고 있습니다."- 다른 것도 할 수 있습니다. 공유 한 코드 어디에도 표시되지 않습니다. – Quentin

+0

글쎄,이 코드 조각에서는 어디서나 정의 된 SVG가 보이지 않는다. – beerwin

답변

3

다음 중 하나를

  • svg이 선언 범위 또는
  • 여전히 당신이 그렇게 setTimeout에 전달하면 함수 내에서 refreshGraph에 할당하는 함수를 정의 svg이 남아 완전히 있도록 외부 루프 범위에 또는
  • 인수로 해당 함수를 전달하십시오. 그것을 호출
관련 문제