Backbone: router.navigate๋Š” ํ•ด์‹œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ ๋ผ์šฐํ„ฐ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2011๋…„ 10์›” 02์ผ  ยท  22์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jashkenas/backbone

๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ์Šฌํ””์„ ์ผ์œผํ‚ค๋Š” ํ•ด์‹œ๋ฑ…์ด ์—†๋Š” URL์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๋‚˜๋Š” ์ด๊ฒƒ์„ํ–ˆ๋‹ค.

<a href="#" onclick="router.navigate('/albums/<%= album.id %>', true); return false;">Show</a>

URL์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์ง€๋งŒ ๋ผ์šฐํ„ฐ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ๊ฒฝ๋กœ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

<a href="#" onclick="router.navigate('/albums/<%= album.id %>', true);">Show</a>

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ํ•ด์‹œ ๋ณ€๊ฒฝ์ด ํŠธ๋ฆฌ๊ฑฐ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋ผ์šฐํ„ฐ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ๋กœ๋“œํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด์ „์— ๊ฒช์—ˆ๋˜ router.navigate() ์˜ ํฅ๋ฏธ๋กœ์šด ๋™์ž‘์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•œ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Backbone.history.loadUrl( Backbone.history.fragment )

API์˜ ์ผ๋ถ€๋กœ _๋ช…์‹œ์ ์œผ๋กœ_ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ํ™•์‹คํžˆ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. router.navigate( 'current/path', true ) ๊ฐ€ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋„๋ก ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์— ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  22 ๋Œ“๊ธ€

์ด๋‹ˆ์…œ / ์ œ๊ฑฐํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฝ๋กœ์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ๋กœ๋“œํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด์ „์— ๊ฒช์—ˆ๋˜ router.navigate() ์˜ ํฅ๋ฏธ๋กœ์šด ๋™์ž‘์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•œ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Backbone.history.loadUrl( Backbone.history.fragment )

API์˜ ์ผ๋ถ€๋กœ _๋ช…์‹œ์ ์œผ๋กœ_ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ํ™•์‹คํžˆ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. router.navigate( 'current/path', true ) ๊ฐ€ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋„๋ก ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์— ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค๋‹ค. ๋‚ด ๊ตฌ์ฒด์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ™”๋ฉด ํฌ๊ธฐ์— ๋ฐ˜์‘ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ณด๊ธฐ์—๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์— ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ์ผ๋ถ€ ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํฌ๊ธฐ ์กฐ์ • ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๋ทฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๋ Œ๋”๋งํ•˜๋Š” ๋Œ€์‹ 

router.navigate(Backbone.history.fragment, true)

Backbone.history๋ฅผ ์ „ํ˜€ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ผ์šฐํ„ฐ์— ์ƒˆ๋กœ ๊ณ ์นจ ๋˜๋Š” ๋‹ค์‹œ ๋กœ๋“œ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

router.refresh(true);

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. @Ansman ๊ฒฝ๋กœ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ ๋ฃจํŠธ์ด๋ฏ€๋กœ ํ•ด์‹œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์„ ํ–‰ ์Šฌ๋ž˜์‹œ๊ฐ€ ๊ธฐ๋ก์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ -- ๋ผ์šฐํŠธ๋‚˜ navigation() ํ˜ธ์ถœ์—์„œ ์„ ํ–‰ ์Šฌ๋ž˜์‹œ๋ฅผ ๊ฐ€์ ธ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ์„ ํ–‰ ์Šฌ๋ž˜์‹œ๋ฅผ ๊ฐ•์ œ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๋งˆ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ปค๋ฐ‹์ด ์žˆ์œผ๋ฏ€๋กœ ๋” ์ด์ƒ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๋™์ž‘์œผ๋กœ ์ด์–ด์ง€์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋ผ์šฐํ„ฐ๋Š” ๊ฒฝ๋กœ๊ฐ€ ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๋กœ๊ฐ€ ํ•ด์‹œ์—์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ router.navigate("route", true)์— ๋Œ€ํ•œ ๋ช…์‹œ์  ํ˜ธ์ถœ์ด ๊ฒฝ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ž„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@danroberts ํ•ด์‹œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฝ๋กœ๋ฅผ ๊ฐ•์ œ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ๋กœ์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” router.navigate("route/", {trigger:true}); ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ํ•ดํ‚น์€ ๋‹จ์ˆœํžˆ router.route_name() ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@olalonde ์œ„์˜ @wookiehangover ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๋™ํ•˜๋ ค๋Š” ๊ฒฝ๋กœ๊ฐ€ ํ˜„์žฌ ํ•ด์‹œ์™€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•œ ๋‹ค์Œ router.navigate ๋˜๋Š” history.loadURL์„ ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์˜ต์…˜ ๋ฐฐ์—ด์˜ ์ผ๋ถ€์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ๊ด€์—†์ด ๊ฒฝ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด ์ƒˆ๋กœ ๊ณ ์นจ:true ์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ {trigger: true}๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค...

์ด ๋ฒ„๊ทธ๋ฅผ ๋‹ซ๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ๋ณธ์„ ์‚ฌ์šฉํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ๋Š” ๊ฒฝ๋กœ์˜ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฑ๋ณธ์„ ํ†ตํ•ด "๋‹ค์‹œ ๋กœ๋“œ"๊ฐ€ ๊ดœ์ฐฎ์€ ๊ฒฝ์šฐ๋ฅผ ์ง์ ‘ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ด ํšจ๊ณผ๋ฅผ ์œ„ํ•ด ๋ญ”๊ฐ€๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

        if (url == window.location.pathname + window.location.search) {
            Backbone.history.loadUrl(url);
            return false;
        }
        else if (app.router.isHandled(url)) {
            Backbone.history.navigate(url, {
                trigger: true
            });
            return false;
        }

์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ, ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ํ”Œ๋žซํผ์— ์žˆ์œผ๋ฉด ์ข‹์„ ์™„์ „ํžˆ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด ์Šค๋ ˆ๋“œ ์ „์— #1214๋ฅผ ๋ณด๊ณ  ๊ฐ™์€ ๋Œ“๊ธ€์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

๋ฐฑ๋ณธ ๋ผ์šฐํ„ฐ๋Š” URL ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ๋ผ์šฐํŒ…๋œ ์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ž‘์—…์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ๋ผ์šฐํ„ฐ์˜ ์ž‘์—…์„ ์žฌ์„ค์ •ํ•˜๋Š” ์ปจํŠธ๋กค์„ ๊ฐ€๋กœ์ฑ„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— jsFiddle ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
http://goo.gl/wํ’€๋กœ

์—ฌ๊ธฐ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ:
http://goo.gl/mJM2i

์˜ค๋Š˜ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ 2์„ผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

trigger: true ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•  ๋•Œ ํ•ด์‹œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š๋Š” ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๋™์ž‘์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‚ด ํˆฌํ‘œ๋Š” ์กฐ๊ฑด์— ๊ด€๊ณ„์—†์ด ๊ฒฝ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” trigger: true ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์‚ฌ๋ก€ ์ค‘ ํ•˜๋‚˜๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๊ณ ์ž ํ•  ๋•Œ trigger: true ์˜ ํ˜„์žฌ ๋™์ž‘์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

KenPerkins ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ +1 ๋˜๋Š” BB ๋ผ์šฐํ„ฐ์— ํ†ตํ•ฉ๋˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ.

{ trigger: true }๊ฐ€ ์ „๋‹ฌ๋œ ๊ฒฝ์šฐ ๋™์ผํ•œ ํŽ˜์ด์ง€์—์„œ ํ”„๋กœ์„ธ์Šค ํƒ์ƒ‰์— ๋Œ€ํ•œ +1

roter.navigate() ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  3์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. BB ๋ฌธ์„œ์—๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋ชป์ƒ๊ฒผ์ง€๋งŒ ๋น ๋ฅธ ํ•ด๊ฒฐ์ฑ…์€ ์‹ค์ œ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ๋จผ์ € router.navigate() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

router.navigate();
router.navigate("app", true);

์ง€๊ธˆ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ refresh:true ์˜ต์…˜์ด ์žˆ์—ˆ๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ™•์‹คํžˆ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

์˜ค๋Š˜ ๋ง‰ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ด๋ฏ€๋กœ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ƒ๊ฐ์„ ๊ทธ๋Œ€๋กœ ๋‘์‹ญ์‹œ์˜ค. {trigger: true} ์˜ต์…˜ ํ•ด์‹œ๋ฅผ router.navigate์— ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•  ๋•Œ ๊ฒฝ๋กœ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. @onuradsay ๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ refresh:true ์˜ต์…˜์˜ ์ถ”๊ฐ€๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค .

@patrickod ๋ฐ @onuradsay ์•„์ด๋””์–ด์˜ ์‹ค์šฉ์„ฑ +1

+1. ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ  ์•ฑ์—์„œ ์ƒˆ๋กœ ๊ณ ์นจ์ด ์š”์ฒญ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋งŽ์€ ํ•ดํ‚น์œผ๋กœ ์ด๊ฒƒ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์ฃผ ๊นจ๋—ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ ๋ผ์šฐํ„ฐ์— ๋„ฃ์„ ๋งŒํผ ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿด ์ผ์€ ์—†์„ ๊ฒƒ ๊ฐ™์•„์š”. ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์‹ค์ œ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค _remove_ trigger:true ๋” ๋งŽ์€ ์ž๊ทน์„ ์ค๋‹ˆ๋‹ค. ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:

Backbone์˜ ์ด๋ฒคํŠธ๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์•Œ๋ฆผ์„ ๋ฐ›๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

model.set({title: "Boom"})
model.set({title: "Boom"})

... ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‘ ๋ฒˆ์งธ๋กœ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ... ์ด๋ฏธ ์žˆ๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ์ƒํƒœ ๋ณ€๊ฒฝ์ด _์•„๋‹™๋‹ˆ๋‹ค_, ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ์ฝœ๋ฐฑ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ฝœ๋ฐฑ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋˜๋Š” Backbone์˜ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด object.trigger("myEvent")๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

trigger:true ๋Œ€์‹  true๋กœ ๊ฐ€์ •ํ•˜๊ณ  silent:false ์˜ต์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฒ„ํŠผ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํ•ญ์ƒ ์ด์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

if (Backbone.history.fragment === 'foo') {
    Backbone.history.loadUrl(Backbone.history.fragment);
 } else {
     router.navigate('foo', {'trigger': true});
}

ํ›Œ๋ฅญํ•œ ํŠธ๋ฆญ์„ ์ œ๊ณตํ•œ @dankantor ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด ์‚ฌ์šฉ ์‚ฌ๋ก€(๋™์ผํ•œ ํŽ˜์ด์ง€/ํ•ด์‹œ๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด)๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ history.fragment ๋Œ€์‹  Backbone.history.getFragment()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ก์˜ ์†์„ฑ์— ์ ‘๊ทผํ•˜์ง€ ์•Š๋„๋ก ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋” ๊นจ๋—ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๊ฐ•์ œ๋กœ ๋‹ค์‹œ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด Backbone.history.refresh ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•ด์‹œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋‹ค์‹œ ๋กœ๋“œํ•˜๋„๋ก ๊ธฐ๋ณธ ํƒ์ƒ‰ ๋™์ž‘์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

      _.extend(Backbone.History.prototype, {
            refresh: function() {
                this.loadUrl(this.fragment);
            }
        });

        var routeStripper = /^[#\/]/;
        var origNavigate = Backbone.History.prototype.navigate;
        Backbone.History.prototype.navigate = function (fragment, options) {
            var frag = (fragment || '').replace(routeStripper, '');
            if (this.fragment == frag)
                this.refresh();
            else
                origNavigate.call(this, fragment, options);
        };
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰