Backbone: url์— ๊ณต๋ฐฑ์ด ์žˆ๋Š” ํƒ์ƒ‰()์€ Firefox์—์„œ {trigger:false}์ธ ๊ฒฝ์šฐ์—๋„ ๊ฒฝ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2014๋…„ 11์›” 27์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jashkenas/backbone

๋‹ค์Œ ์˜ˆ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

$(function(){
var AppRouter = Backbone.Router.extend({

    routes: {
        '(count/:count)': 'home',
    },

    home: function(currCount) {
        var counter = 0;
        var thisObj = this;

        $("body").html($("<p>Click me</p>").on('click', function() {
            console.log("clicked "+counter);
            counter++;
            thisObj.navigate('count/'+counter, {trigger:false, replace: true});
        }));

        console.log('home route: '+currCount);    
    },
});

window.app = new AppRouter();
Backbone.history.start();
});

์ด๊ฒƒ์€ "home route: null"์„ ๊ธฐ๋กํ•˜๊ณ  "Click me"๋ฅผ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค "click #"์„ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ž‘์€ ์ˆ˜์ •์„ ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Navigation()์—์„œ URL์— ๊ณต๋ฐฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

thisObj.navigate('count/ '+counter, {trigger:false, replace: true});

๋‹ค์‹œ ์‹œ๋„ํ•˜๋ฉด "home route: #"๋„ ๊ธฐ๋ก๋˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์นด์šดํ„ฐ๊ฐ€ _์„ธ ๋ฒˆ์˜ ํด๋ฆญ ์ค‘ ๋‘ ๋ฒˆ_์„ ์žฌ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ 1.1.2 ๋ฆด๋ฆฌ์Šค์— ์žˆ์œผ๋ฉฐ ์ตœ์‹  Firefox 33.1์—์„œ ํ…Œ์ŠคํŠธ ์ค‘์ž…๋‹ˆ๋‹ค. Chrome์—์„œ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Chrome์ด URL์˜ ๊ณต๋ฐฑ์„ ์ธ์ฝ”๋”ฉํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ URL์— ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์ด ๋™์ž‘์€ ์ด์ƒํ•˜๊ณ  ์ตœ์†Œํ•œ ๋ฌธ์„œํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ฆ‰, "navigate()๋Š” ๊ณต๋ฐฑ(๋˜๋Š” ๊ธฐํƒ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฌธ์ž??)์ด ํฌํ•จ๋œ URL์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")

์ด์— ๋Œ€ํ•œ ์‰ฌ์šด ์ˆ˜์ •์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ ์ด ๋ฒ„๊ทธ๋ฅผ ๋ฌธ์„œํ™”ํ•จ์œผ๋กœ์จ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ทธ๊ฒƒ์„ ์ฐพ์•„๋‚ด๋Š” ๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ ๋‚ด๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Firefox์—์„œ "this.location.href" ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ณต๋ฐฑ์ด %20์œผ๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค. Chrome(๋ฐ ์•„๋งˆ๋„ IE)์€ ๊ณต๋ฐฑ์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. ํƒ์ƒ‰์œผ๋กœ ์ด๋™ํ•  ๋•Œ "checkUrl()"์ด "this.getFragment()"์˜ ๋ฐ˜ํ™˜ ๊ฐ’๊ณผ "this.fragment"๋ฅผ ๋น„๊ตํ•˜์—ฌ "this.getFragment()"๋ฅผ ํ˜ธ์ถœํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ Backbone์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. loadUrl()", ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ. this.getFragment()๋Š” Firefox์˜ ๊ณต๋ฐฑ(๋˜๋Š” ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ธ์ฝ”๋”ฉ) ๋Œ€์‹  %20์„ ์‚ฌ์šฉํ•˜์—ฌ this.location.href์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. this.fragment๋Š” ๋””์ฝ”๋”ฉ๋œ ๋“ฑ๊ฐ€๋ฌผ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. this.fragment๋Š” URL์—์„œ encodeURI()๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋””์ฝ”๋”ฉ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. "navigate()" ํ•จ์ˆ˜์—์„œ this.fragment๋Š” ์ „๋‹ฌ๋˜๋Š” URL์—์„œ "this.decodeFragment()"๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ธ์ฝ”๋”ฉ์„ ๊ฐ•์ œํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ this.fragment๊ฐ€ this.decodeFragment()์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ํ•ญ์ƒ ๋””์ฝ”๋”ฉ๋œ URL์ด๊ณ  URL์— encodeURI()๊ฐ€ ๋ณ€๊ฒฝํ•  ๋ฌธ์ž(์ด ๊ฒฝ์šฐ ๊ณต๋ฐฑ)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜๋œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Firefox์˜ .getFragment(), Firefox๋Š” this.location.href์˜ ๊ฐ’์„ ์ธ์ฝ”๋”ฉํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ธ์ฝ”๋”ฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ’์ด ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— router.navigate์˜ ํŠธ๋ฆฌ๊ฑฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ true ๋˜๋Š” false์ธ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด this.loadUrl()์ด checkUrl()์—์„œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋น„ ์ˆ˜์ •(์‚ฌ์ „ ํ…Œ์ŠคํŠธ)์€ "getHash()" ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

return match ? this.decodeFragment(match[1].replace(pathStripper, '')) : '';

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

์•ˆ๋…•ํ•˜์„ธ์š” @chaimpeck์ž…๋‹ˆ๋‹ค! ์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์™€ 1.1.2 ๋ฆด๋ฆฌ์Šค ๋ชจ๋‘์—์„œ ์ตœ์‹  Chrome ๋ฐ Firefox๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” gist/bin/fiddle์— ์ž‘์—… ์˜ˆ์ œ๋ฅผ ๊ฒŒ์‹œํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ํ™•์‹คํžˆ ์ด์ „์— Firefox์—์„œ ํŠน์ • ๋ฌธ์ž๋ฅผ ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์˜์‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. : ์Šค๋งˆ์ผ :

์‹ค์ œ๋กœ ์ด์™€ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ณด์•˜์ง€๋งŒ ๋‚ด ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ณต์ œํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์กฐ๋กฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ตœ์‹  ๋ฒ„์ „์˜ IE์™€ Chrome์€ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ตœ์†Œํ•œ Firefox v31.5.0(๋ฌป์ง€ ๋งˆ์„ธ์š”. ์šฐ๋ฆฌ๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” ์ธํ”„๋ผ๊ฐ€ ์‹ซ์–ด์š”)์—์„œ๋Š” ํŠธ๋ฆฌ๊ฑฐ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ ๋„ ํ™•์‹คํžˆ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋‚ด๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Firefox์—์„œ "this.location.href" ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ณต๋ฐฑ์ด %20์œผ๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค. Chrome(๋ฐ ์•„๋งˆ๋„ IE)์€ ๊ณต๋ฐฑ์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. ํƒ์ƒ‰์œผ๋กœ ์ด๋™ํ•  ๋•Œ "checkUrl()"์ด "this.getFragment()"์˜ ๋ฐ˜ํ™˜ ๊ฐ’๊ณผ "this.fragment"๋ฅผ ๋น„๊ตํ•˜์—ฌ "this.getFragment()"๋ฅผ ํ˜ธ์ถœํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ Backbone์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. loadUrl()", ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ. this.getFragment()๋Š” Firefox์˜ ๊ณต๋ฐฑ(๋˜๋Š” ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ธ์ฝ”๋”ฉ) ๋Œ€์‹  %20์„ ์‚ฌ์šฉํ•˜์—ฌ this.location.href์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. this.fragment๋Š” ๋””์ฝ”๋”ฉ๋œ ๋“ฑ๊ฐ€๋ฌผ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. this.fragment๋Š” URL์—์„œ encodeURI()๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋””์ฝ”๋”ฉ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. "navigate()" ํ•จ์ˆ˜์—์„œ this.fragment๋Š” ์ „๋‹ฌ๋˜๋Š” URL์—์„œ "this.decodeFragment()"๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ธ์ฝ”๋”ฉ์„ ๊ฐ•์ œํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ this.fragment๊ฐ€ this.decodeFragment()์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ํ•ญ์ƒ ๋””์ฝ”๋”ฉ๋œ URL์ด๊ณ  URL์— encodeURI()๊ฐ€ ๋ณ€๊ฒฝํ•  ๋ฌธ์ž(์ด ๊ฒฝ์šฐ ๊ณต๋ฐฑ)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜๋œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Firefox์˜ .getFragment(), Firefox๋Š” this.location.href์˜ ๊ฐ’์„ ์ธ์ฝ”๋”ฉํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ธ์ฝ”๋”ฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ’์ด ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— router.navigate์˜ ํŠธ๋ฆฌ๊ฑฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ true ๋˜๋Š” false์ธ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด this.loadUrl()์ด checkUrl()์—์„œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋น„ ์ˆ˜์ •(์‚ฌ์ „ ํ…Œ์ŠคํŠธ)์€ "getHash()" ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

return match ? this.decodeFragment(match[1].replace(pathStripper, '')) : '';

๋งˆ์ง€๋ง‰ ๋ฒ„์ „์—์„œ ์—ฌ์ „ํžˆ ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

URL์—์„œ ๋น„ํ‘œ์ค€ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” รฅรครถ(์Šค์›จ๋ด ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋œ ๋ฌธ์ž)์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์˜ Chrome ๋ฐ Backbone.

sjmiller85์˜ ์†”๋ฃจ์…˜์€ ์ €์—๊ฒŒ๋„ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๋ฆฌ ๊ฐ์‚ฌ!

@sjmiller85 ์—ฌ๊ธฐ์„œ ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ด์—ˆ์Šต๋‹ˆ๊นŒ? 'pathStripper'์— ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •๊ทœ์‹์ž…๋‹ˆ๊นŒ?
ํŽธ์ง‘ : ์ด๊ฒƒ์€ ๋‚ด ์ƒํ™ฉ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. https://github.com/jashkenas/backbone/pull/3955/files ์ฐธ์กฐ
getHash: function (t) { var e = (t || this).location.href.match(/#(.*)$/); return e ? e[1] : "" }

๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด @Aggror pathStripper๋Š” ํ•ด์‹œ URL์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ์บ์‹œ๋œ ์ •๊ทœ์‹์ž…๋‹ˆ๋‹ค.

// Cached regex for stripping urls of hash.
var pathStripper = /#.*$/;

๋”ฐ๋ผ์„œ ์†”๋ฃจ์…˜๊ณผ ๋™์ผํ•˜๋ฉฐ ๋” ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. :)

๋ผ์šฐํ„ฐ์— ๋™์‹œ์— ๋™์ผํ•œ ํ•ด์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์ดˆ๊ธฐ ์กฐ๊ฑด์„ ๊ด€๋ฆฌํ•˜์‹ญ์‹œ์˜ค. ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
(์ดˆ๊ธฐ ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด) (๋™์‹œ์— ๋™์ผํ•œ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด)
if ( route.length === 1 || route[routes.length-1] === getHash() ) {
๊ฑฐ์ง“์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
}
๋˜ ๋‹ค๋ฅธ{
route.push(getHash())
};

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰