2017-02-15 1 views
0

코드가 현재 정상적으로 작동하지만 clicky 함수를 사용하여 콘솔에 전송 된 객체에 이름을 지정하고 싶습니다. 콘솔은 Object {type: "MultiPolygon", coordinates: Array[1]}을 반환하며 나중에 생성 된 동일한 이름으로 CSV 파일을 가져올 때 참조 할 수 있도록 변수 이름에 할당하려고합니다. 어떻게해야합니까?D3.js의 배열 객체에 변수 이름 지정

var northcentral = { 
    "47": 1, "37": 1, "45": 1, "13": 1 
}; 

var northcentral_c = { 
    "25": 1, "09": 1, "44": 1, "50": 1, "33": 1, "23" :1 
}; 

var svg = d3.select("svg"); 

var path = d3.geoPath(); 

var nc = []; 
Array.prototype.push.apply(nc,us.objects.states.geometries.filter(function(d) { return d.id in northcentral; })) 
Array.prototype.push.apply(nc,us.objects.counties.geometries.filter(function(d) { return d.id in northcentral_c; })) 

svg.append("path") 
    .datum(topojson.merge(us, nc)) 
    .attr("class", "state northcentral") 
    .attr("d", path) 
    .on("click", clicky); 

function clicky(d){ 
    console.log(d); 
} 

답변

0

글쎄이있다 : clicky()dWhichWasClicked 외부를 선언함으로써

var dWhichWasClicked = null 

function clicky(d){ 
    console.log(d); 
    dWhichWasClicked = d 
} 

, 그것을 사용할 수 있습니다 (즉 범위), 그 파일의 다른 코드 dWhichWasClickedclicky() 내부에 선언 된 반면, 그 해당 기능 내에서만 범위 내에있게됩니다.

일반적으로 글로벌 변수를 사용하는 것은 좋지 않지만이 접근법은 반드시 글로벌 변수는 아니지만 가까운 시간에 제공됩니다.

당신은 단순히 CSV로드하는 기능을 할 수 :

function loadCSV(filename) { 
    // load it now 
} 

을 그리고 클릭 핸들러에서 호출

function clicky(d){ 
    console.log(d); 
    loadCSV(getFilenameFor(d)) 
}