자바 스크립트 라이브러리 d3 호출 기능


81

d3.call ()이 어떻게 작동하는지 언제 어디서 사용해야하는지 이해할 수 없습니다. 여기완료하려는 튜토리얼 링크는 .

누군가이 작품이하는 일을 구체적으로 설명해 주시겠습니까?

var xAxis = d3.svg.axis()
              .scale(xScale)
              .orient("bottom");

svg.append("g").call(xAxis);

당신이 제공하는 링크에 대해 설명 call()하지
이부

17
예,하지만 여전히 무엇을 얻을 수 없습니다 svg.append ( "g") .call (xAxis); 하고 있습니다 :(
Andy897

답변:


112

여기서 트릭은 xAxis가 SVG 요소를 생성하는 함수라는 것을 이해하는 것입니다. 실제로에서 반환하는 함수 d3.svg.axis()입니다. scale 및 orient 함수는 연결 구문의 일부일뿐입니다 (자세한 내용은 http://alignedleft.com/tutorials/d3/chaining-methods/ 참조). ).

따라서 svg.append("g")SVG 그룹 요소를 svg에 추가하고 선택의 형태로 자신에 대한 참조를 반환합니다 (여기서는 동일한 체인 구문). call선택에 사용할 때 선택 xAxis요소에 이름이 지정된 함수를 호출합니다 g. 이 경우 xAxis새로 생성 및 추가 된 그룹 에서 축 함수를 실행하고 g있습니다.

그래도 말이 안된다면 위의 구문은 다음과 같습니다.

xAxis(svg.append("g"));

또는:

d3.svg.axis()
      .scale(xScale)
      .orient("bottom")(svg.append("g"));

svg.axis ()의 G 요소를 어떻게 편집합니까? 서로 블리딩되는 레이블이 있으며 변형을 적용하고 싶습니다. 하지만 이러한 요소에 액세스 할 수없는 것 같습니다
CQM

여기에서 답을 확인하십시오. stackoverflow.com/questions/12825630/… 텍스트 또는 눈금 요소를 선택한 후 원하는 경우 변환을 적용 할 수 있어야합니다.
Superboggly 2013

xAxis를 호출하기 위해 둘 중 하나를 수행하는 데 차이가 있습니까?
I Like

4
이것은 .call()일반적으로 방법을 잘 설명합니다 . 특히 축 객체를 호출 한 결과에 대해서는 설명하지 않습니다. 그리고 그것은 객체와 함수 둘 다 처럼 행동하는 축 객체의 초현실적 인 상황을 정당화하는 것에 가깝지 않습니다 . 왜 그럴까요? 그래서 문서는 그것을 호출 하면 축을 렌더링 한다고 말합니다 . 축 객체에 .render () 메서드를 제공하는 것보다 낫습니까? 않을까요 훨씬 더 간단 지원xAxis.scale(...).orient(...).render(...)
밥 스타

1
선택 호출의 문서에서 "유일한 차이점은 selection.call은 항상 호출 된 함수 이름의 반환 값이 아니라 선택 항목을 반환한다는 것입니다."
heltonbiker

5

받아 들여진 대답이 IMO에서 빠진 .call()것은 D3 API 함수 이며 Function.prototype.call () 과 혼동하지 않아야한다는 것입니다.

selection.call(function[, arguments…])

지정된 함수를 정확히 한 번 호출하여 선택적 인수와 함께이 선택 항목을 전달합니다. 이 선택을 반환합니다. 이것은 수동으로 함수를 호출하는 것과 동일하지만 메소드 체인을 용이하게합니다. 예를 들어 재사용 가능한 함수에 여러 스타일을 설정하려면 다음을 수행하십시오.

이제 다음과 같이 말합니다.

d3.selectAll("div").call(name, "John", "Snow");

이것은 대략 다음과 같습니다.

name(d3.selectAll("div"), "John", "Snow");

유일한 차이점은 selection.call은 항상 호출 된 함수 name 의 반환 값이 아니라 선택 항목을 반환 한다는 것 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.