Ember.js: EmberRouter์— ๋ผ์šฐํ„ฐ ์„œ๋น„์Šค๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ๋ฌดํ•œ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 03์›” 22์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: emberjs/ember.js

์ฝ”๋“œ ์ƒ˜ํ”Œ :

// app/router.js
const Router = EmberRouter.extend({
  location: config.locationType,
  rootURL: config.rootURL,

  routerService: service('router'),

  init() {
    this.routerService.on('routeDidChange', () => {});
  }
});

๋ณต์ œ : https://github.com/ember-triage/emberjs-17791

์ถ”์‹  router ๋ฅผ EmberRouter ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ๋„ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

Bug Has Reproduction Router Bugs

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

@ursqontis ๊ธฐ๋ก์„ ์œ„ํ•ด ๋ผ์šฐํ„ฐ ๋‚ด์—์„œ ๋ผ์šฐํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. this.on('routeDidChange') ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ์ด ์Šค ๋‹ˆํŽซ์—๋Š” https://github.com/efx/emberjs-17791/commit/8d8dd5afa1b9841742d1127a95689ab98c085632#diff -f3a289058604b2b069d07bb8e2cda60cR8์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋ถˆ์ผ์น˜์— ๋Œ€ํ•œ ํ† ๋ก ์— ๋”ฐ๋ผ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ this._super(...arguments); ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.https://github.com/efx/emberjs-17791/commit/8d8dd5afa1b9841742d1127a95689ab98c085632#diff -f3a289058604b2b069d07bb8e2cda60cR8
๋‚ด ์˜ค๋ฅ˜; ์ด๋ฅผ ๋ผ์šฐํ„ฐ ์ธ์Šคํ„ด์Šค์—์„œ ๋ผ์šฐํŒ… ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์Šค ๋‹ˆํŽซ์ด ๋ผ์šฐํ„ฐ ์„œ๋น„์Šค๋ฅผ ์ฃผ์ž…ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” @efx ๋Š” ๋‹ค๋ฅธ ์ƒํ™ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

Ember 3.8์—์„œ๋„์ด ๋™์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•”ํ˜ธ:

import EmberRouter from '@ember/routing/router';
import config from './config/environment';
import { set } from '@ember/object';

import { inject as service } from '@ember/service';


const Router = EmberRouter.extend({
  location: config.locationType,
  rootURL: config.rootURL,

  router: service(),
  routeHelpers: service(),

  init() {
    this._super(...arguments);
    this.router.on('routeDidChange', () => {
      // tracking with piwik, if the piwik object has been defined
      if (typeof _paq === 'object') {
        _paq.push(['trackPageView']);
      }

      // tracking with google analytics, if the ga method has been defined
      if (typeof ga === 'function') {
        return ga('send', 'pageview', {
          'page': this.get('url'),
          'title': this.get('url')
        });
      }

      // set current route to the onla accordion, which will open
      // it's corresponding accordion element
      var onlaController = this.routeHelpers.controllerFor('onla');
      set(onlaController, 'currentRouteName', this.router.currentRouteName);

    });
  }


});

์˜ˆ์™ธ:

Exception has occurred: RangeError
RangeError: Maximum call stack size exceeded
    at Registry.isValidFullName (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:16657:20)
    at Registry.has (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:16448:17)
    at Registry.proto.validateInjections (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:16762:25)
    at processInjections (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:15999:28)
    at buildInjections (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:16040:7)
    at injectionsFor (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:16051:12)
    at FactoryManager.create (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:16116:13)
    at instantiateFactory (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:15979:63)
    at lookup (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:15907:12)
    at Container.lookup (https://n204.crealogix.net:4200/assets/vendor-e2a60dfe5e2603e2bdff789c3cdefd1e.js:15751:14)

์ด ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 'routeDidChange'์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ router.js 'didTransition'ํ•จ์ˆ˜๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€์› ์ค‘๋‹จ : ์ง€์› ์ค‘๋‹จ ๋œ "didTransition"๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ผ์šฐํ„ฐ ์„œ๋น„์Šค๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  "routeDidChange"์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜์‹ญ์‹œ์˜ค. [์ง€์› ์ค‘๋‹จ ID : deprecate-router-events] ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://emberjs.com/deprecations/v3.x#toc_deprecate -router-events๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

@ursqontis ๊ธฐ๋ก์„ ์œ„ํ•ด ๋ผ์šฐํ„ฐ ๋‚ด์—์„œ ๋ผ์šฐํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. this.on('routeDidChange') ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ์ด ์Šค ๋‹ˆํŽซ์—๋Š” https://github.com/efx/emberjs-17791/commit/8d8dd5afa1b9841742d1127a95689ab98c085632#diff -f3a289058604b2b069d07bb8e2cda60cR8์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด EmberRouter ์—์„œ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์œ„ํ•œ ๊ณต์šฉ API๊ฐ€๋˜๋„๋ก ์˜๋„ ๋œ ๊ฒฝ์šฐ ๋ฌธ์„œํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? cc. @pzuraq @rwjblue @chadhietala? ๊ณต๊ฐœ API๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ž‘์€ RFC๋ฅผ ์ž‘์„ฑ ํ•˜์—ฌ ๊ณต๊ฐœ API๋กœ

์„œ๋น„์Šค ์ฃผ์ž…์ด ์‹คํŒจํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒ„๊ทธ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฌธ์ œ๋Š” ๋ผ์šฐํ„ฐ ์„œ๋น„์Šค ์ž์ฒด์— router : main์ด ์ฃผ์ž…๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • service : router ๊ฐ€ ์ธ์Šคํ„ด์Šคํ™” ๋  ๋•Œ router : main์„ ์ˆ˜์‹ ํ•˜๋„๋ก ์ฃผ์ž…
  • ๋ผ์šฐํ„ฐ : ๋ฉ”์ธ ์กฐํšŒ
  • router : main ์€ ์ธ์Šคํ„ด์Šคํ™”์‹œ service : router ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค (๋ชจ๋“  ์„œ๋น„์Šค ์ฃผ์ž…์— ๋Œ€ํ•œ ๋””๋ฒ„๊ทธ ๋นŒ๋“œ์—์„œ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์ฐธ์กฐ ๋œ ์„œ๋น„์Šค๋ฅผ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ์ข‹์€ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. _if_ ์˜ค๋ฅ˜ ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋ฐ˜๋Œ€๋กœ) ์„œ๋น„์Šค ์ด์šฉ ์‹œ๋„)
  • service : router ๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๋Š” router : main (ํ•ด๋‹น ์ฃผ์ž…์„ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด)์„ ์ƒ์„ฑํ•˜๋ ค๊ณ 
  • ๊ณ ๋ฆฌ

์—ฌ๊ธฐ์„œ ์ˆ˜์ •์€ ๋ผ์šฐํ„ฐ ์„œ๋น„์Šค๊ฐ€ ๋ผ์šฐํ„ฐ๋ฅผ _not_ ์—ด์‹ฌํžˆ ์กฐํšŒํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค .

@rwjblue , ๋ฆฌํ”„ํŠธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์–ด๋ ต์Šต๋‹ˆ๊นŒ? ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ๋™์•ˆ ๊ฒฝ๋กœ๊ฐ€ ๋ถ„๋ช…ํ•˜๋‹ค๋ฉด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@chriskrycho ๋‹น์‹œ ์ด๊ฒƒ์„ ๋†“์นœ ๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์ฃผ์ž…์„ ์ œ๊ฑฐํ•˜๊ณ  ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์„ ๋•Œ๋งŒ ๋ผ์šฐํ„ฐ ์„œ๋น„์Šค๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๊ฐ„๋‹จํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : "๋„ˆ๋ฌด ์–ด๋ ต์ง€ ์•Š์Œ").

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