Internals - zziuni/d3 GitHub Wiki

Wiki โ–ธ API Reference โ–ธ Core โ–ธ Internals

์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„์„ ์œ„ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชจ์Œ

Functions

# d3.functor(value)

value ๊ฐ€ ํ•จ์ˆ˜๋ฉด ๊ทธ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ง€์ •ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์–ด๋–ค ํ”„๋กœํผํ‹ฐ๊ฐ€ ํ•จ์ˆ˜ ๋˜๋Š” ์ƒ์ˆ˜ ์–ด๋Š ๊ฒƒ์œผ๋กœ๋“  ์ง€์ •๋  ์ˆ˜ ์žˆ์„ ๊ฒฝ์šฐ ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์ˆ˜๊ฐ’์„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๋Š์Šจํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€๋ถ€๋ถ„์˜ D3 ๋ ˆ์ด์•„์›ƒ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋‚ด๋ถ€์—์„œ ์ž๋™์œผ๋กœ ์ƒ์ˆ˜๊ฐ’์„ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ฝ”๋“œ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•ด ์ง„๋‹ค.

# d3.rebind(target, source, namesโ€ฆ)

์ง€์ •ํ•œ name ์˜ ๋ฉ”์„œ๋“œ๋ฅผ source ์—์„œ target ์œผ๋กœ ๋ณต์‚ฌํ•œ ํ›„ target ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ „๋‹ฌ์ธ์ž๊ฐ€ ์—†์ด ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ผ๋ฉด, ์‹คํ–‰ ํ›„ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” "getter" ๋ชจ๋“œ์ด๊ณ  ์ „๋‹ฌ์ธ์ž๊ฐ€๋ฅผ ๊ฐ€์ง€๊ณ  ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ผ๋ฉด ์‹คํ–‰ ํ›„ target ์ด ๋ฐ˜ํ™˜๋˜๋Š” "setter" ๋ชจ๋“œ์ด๋‹ค. ์ƒ์†๋œ ๋ฉ”์„œ๋“œ(mix-ins)๋Š” rebind ์—ฐ์‚ฐ์ž๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ์—ฎ์ผ ์ˆ˜ ์žˆ๋‹ค.

Events

D3๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฒคํŠธ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ ๋””์ŠคํŒจ์ฒ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

# d3.dispatch(typesโ€ฆ)

์ง€์ •ํ•œ types ๋ฅผ ์œ„ํ•œ ์‹ ๊ทœ ๋””์ŠคํŒจ์ฒ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ฐ ์ „๋‹ฌ์ธ์ž๋Š” "zoom", "change" ๊ฐ™์€ ์ด๋ฒคํŠธ ํƒ€์ž…๋ช…์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ด๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ์ฒด๋Š” ๊ฐ ํƒ€์ž…๋ช…์ด ๋””์ŠคํŒจ์ฒ˜ ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋œ ์—ฐ๊ด€๊ฐœ๋ณ„์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "start"์™€ "end" ์ด๋ฒคํŠธ๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ ๋””์ŠคํŒจ์ฒ˜๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

var dispatch = d3.dispatch("start", "end");

๊ทธ๋Ÿฌ๋ฉด event.start์™€ event.end ์ฒ˜๋Ÿผ ๊ฐ๊ฐ์˜ ์ด๋ฒคํŠธ ํƒ€์ž…์„ ์œ„ํ•œ ๋””์ŠคํŒจ์ฒ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•„์š”ํ•˜๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

dispatch.on("start", listener);

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋ฆฌ์Šค๋„ˆ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

dispatch.start();

๋ฆฌ์Šค๋„ˆ์— ์ „๋‹ฌ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋” ์ƒ์„ธํ•œ ๋ฐฉ๋ฒ•์€ dispatch๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

# dispatch.on(type[, listener])

์ง€์ •ํ•œ type ์„ ์œ„ํ•œ ์ด๋ฒคํŠธ listener ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•œ๋‹ค. type ์€ "start", "end"๊ฐ™์€ ์ด๋ฒคํŠธ ํƒ€์ž…๋ช… ๋ฌธ์ž์—ด์ด๋‹ค. listener ๋Š” caller๋กœ ๊ฒฐ์ •๋œ ์ปจํ…์ŠคํŠธ์™€ ์ „๋‹ฌ์ธ์ž๋กœ ์‹คํ–‰๋œ๋‹ค. dispatch๋ฅผ ์ฐธ๊ณ ํ•˜๋ผ.

ํ•ด๋‹น ํƒ€์ž…์— ์ด๋ฏธ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋“ฑ๋ก๋˜์–ด์žˆ๋‹ค๋ฉด, ์‹ ๊ทœ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์ด์ „ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ๊ฐ™์€ ์ด๋ฒคํŠธ ํƒ€์ž…์— ์—ฌ๋Ÿฌ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•˜๋ ค๋ฉด "click.foo", "click.bar"์ฒ˜๋Ÿผ ํƒ€์ž…๋ช…์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋”ฐ๋ผ๋ถ™์–ด์•ผ ํ•œ๋‹ค.

"listener" ๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋„˜๊ธฐ์ง€ ์•Š์œผ๋ฉด ์ง€์ • type ์— ํ˜„์žฌ ํ• ๋‹น๋œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฌผ๋ก  ์žˆ์„ ๊ฒฝ์šฐ.

# dispatch.type(argumentsโ€ฆ)

์•ž์—์„œ ์„ค๋ช…ํ•œ dispatch.start ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ type ๋ฉ”์„œ๋“œ๋ผํ•˜๋Š”๋ฐ, type ๋ฉ”์„œ๋“œ๋Š” ๋“ฑ๋ก๋œ ๋ฆฌ์Šค๋„ˆ ๋ณ„๋กœ ์ง€์ •ํ•œ arguments ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. this ์ปจํ…์ŠคํŠธ๋Š” ๋“ฑ๋ก๋œ ๋ฆฌ์Šคํ„ฐ์˜ ์ปจํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋ฆฌ์Šค๋„ˆ๊ฐ€ foo ์ปจํ…์ŠคํŠธ์™€ bar ์ „๋‹ฌ์ธ์ž๋กœ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด dispatch.call( foo , bar ) ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด์™€๊ฐ™์ด ์—ฌ๋Ÿฌ๋ถ„์€ ์›ํ•˜๋Š” ๋ฆฌ์Šค๋„ˆ๋กœ ์–ด๋–ค ์ „๋‹ฌ์ธ์ž๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋‚˜ ํ•ด๋‹น datum( d )์™€ index( i )๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ๋˜ํ•œ call๋‚˜ apply๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์Šค๋„ˆ์˜ "this" ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋„ค์ดํ‹ฐ๋ธŒ "click"์˜ ์ปจํ…์ŠคํŠธ์™€ ์ „๋‹ฌ์ธ์ž๋ฅผ ๊ณ„์Šนํ•œ "์‚ฌ์šฉ์ž ์ •์˜" ์ด๋ฒคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•œ๋‹ค.

selection.on("click", function(d, i) {
  dispatch.custom.apply(this, arguments);
});
โš ๏ธ **GitHub.com Fallback** โš ๏ธ