Ember.js: `setupController`μ—μ„œ 컨트둀러 속성을 섀정해도 쿼리 맀개 λ³€μˆ˜κ°€ μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2014λ…„ 08μ›” 21일  Β·  29μ½”λ©˜νŠΈ  Β·  좜처: emberjs/ember.js

μ»¨νŠΈλ‘€λŸ¬κ°€ λ‹€μŒκ³Ό 같이 μ •μ˜ 된 경우

App.IndexController = Ember.Controller.extend({
  queryParams: ['foo'],
  foo: ''
});

Routes setupControllerμ—μ„œ λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

setupController: function(controller, model){
  controller.set('model', model);
  controller.set('foo', 'bar'); // <-- setting this should update the query param
}

쿼리 맀개 λ³€μˆ˜κ°€ URL에 μ„€μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ—μ„œ μž‘μ—… λΉˆμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ : http://emberjs.jsbin.com/dekuj/1/edit

Bug Inactive Query Params

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λ„ Ember 2.11μ—μ„œμ΄ 문제λ₯Όλ³΄κ³  μžˆλŠ”λ°, μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 쿼리 맀개 λ³€μˆ˜λ₯Ό μ§€μš°λ €κ³  해도 νš¨κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  29 λŒ“κΈ€

Ember.run.later μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€ (λ¨Όμ € μ™„μ „νžˆ κ΅¬μ²΄ν™”λ˜μ—ˆλŠ”μ§€ 확인) : http://emberjs.jsbin.com/kowoqo/1/edit

@machty- μ—¬κΈ°μ„œ μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λ‚˜λŠ” μš°λ¦¬κ°€ 이것에 λŒ€ν•œ λͺ…μ‹œμ μΈ ν…ŒμŠ€νŠΈλ₯Ό 가지고 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것이 버그라고 μƒκ°ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” 이것에 λŒ€ν•œ ν…ŒμŠ€νŠΈλ₯Ό 가지고 μžˆμ§€λ§Œ 초기 μ•± λΆ€νŒ…μ΄ μ•„λ‹Œ transitionTo 의 μ»¨ν…μŠ€νŠΈμ—μ„œλ§Œ μžˆμŠ΅λ‹ˆλ‹€.

μž‘μ—… : http://jsbin.com/mejeto/1#/about

이 버그 https://github.com/emberjs/ember.js/pull/5473에 λŒ€ν•œ μ‹€νŒ¨ ν…ŒμŠ€νŠΈλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
이 문제λ₯Ό κ³ μΉ˜λŠ” 데 찌λ₯΄λ €κ³  ν•  κ²ƒμž…λ‹ˆλ‹€.

κ΄€λ ¨ 문제λ₯Ό μš°μ—°νžˆ 발견 ν•œ 것 κ°™μ•„ GitHubμ—μ„œ λ³„λ„μ˜ 티켓이 ν•„μš”ν•œμ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

export default Ember.Controller.extend({
    queryParams: ['modal'],
    modal: null,
    handleModal: function () {
        this.send('openModal', this.get('modal'));
    }.observes('modal')
});
export default Ember.Route.extend({
    actions: {
        openModal: function (name) {
            return this.render(name, {
                into: 'application',
                outlet: 'modal'
            });
        }
    }
});

이것은 Error while processing route: index Nothing handled the action 'openModal'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble. 던질 λ•Œ λΆ€νŒ…μ„ μ œμ™Έν•œ λͺ¨λ“  κ²½μš°μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

Ember.run.next μ‚¬μš©ν•˜μ—¬ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

handleModal: function () {
    Ember.run.next(this, function () {
        this.send('openModal', this.get('modal'));
    });
}.observes('modal')

ν‹€λ¦° 것 κ°™μ§€λ§Œ.

JSBins :
Ember.run.next κ°€
Ember.run.nextλ₯Ό μ‚¬μš©ν•˜λ©΄ μ½˜μ†”μ—μ„œ 'λ‹€μ‹œ ν‘œμ‹œ'λ©λ‹ˆλ‹€.

@ Igor10k λ‚˜λŠ”μ΄ λ˜‘κ°™μ€ 문제, λͺ¨λ‹¬ 등을

λˆ„κ΅¬λ‚˜ 이것이 1.8μ—μ„œ μ—¬μ „νžˆ λ¬Έμ œμž„μ„ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

@wagenet yes 이것은 1.8μ—μ„œ μ—¬μ „νžˆ λ¬Έμ œμž…λ‹ˆλ‹€.
http://emberjs.jsbin.com/lezuhu/1/edit?html , js, output

그리고 μΉ΄λ‚˜λ¦¬μ•„ :
http://emberjs.jsbin.com/doyohe/1/edit?html , js, output

@machty- 생각?

λ‚˜λŠ” 이것이 1.8.1을 μ‚¬μš©ν•˜λŠ” λ‚˜μ—κ²Œλ„ 버그라고 μƒκ°ν•©λ‹ˆλ‹€. λ‚΄κ°€ μ›ν•˜λŠ” 것은 νŠΉμ • queryParam이 λ³€κ²½ 될 λ•Œλ§ˆλ‹€ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 특수 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이런 λͺ¨μ–‘μ˜ λΌμš°ν„°κ°€ μžˆμŠ΅λ‹ˆλ‹€.
μ–΄λ–€ μΆ©κ³ ?

// ...snip...

// for pagination
queryParams: {
  offset: {
    refreshModel: true
  }
},

model: function(params) {
  // returns model
},

setupController: function(controller, model) {
  this._super(controller, model);
  controller.set('model', model);

  // Fetch results is a method that does a bunch work
  // sets up some filters, generates a promise, resolves that promise
  // and then sets some array data on the controller once promise resolves.
  // offset is a pagination feature which determines which specific results
  // are fetched. I would like to be able to call fetchResults everytime the
  // offset queryParam is changed. 
  Ember.run.later(function() {
    controller.sendAction('fetchResults');
  })
}

// ...snip...

@machty- 이것에 λŒ€ν•œ 파고λ₯Ό μ‹œμž‘ν•  μœ„μΉ˜μ— λŒ€ν•œ 아이디어?

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 컨트둀러의 this.set ()은 URL의 쿼리 맀개 λ³€μˆ˜λ₯Ό μ—…λ°μ΄νŠΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

App.SearchController = Ember.Controller.extend ({
queryParams : [ '도메인'],
도메인 : null,

domainField : Ember.computed.oneWay ( '도메인'),
μž‘μ—… : {
searchSubmit : function () {
this.set ( 'domain', this.get ( 'domainField')); // '도메인'맀개 λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ§€λ§Œ URL을 μˆ˜μ •ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ App.SearchRoute의 λͺ¨λΈμ€ μ˜ˆμƒλŒ€λ‘œ ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
}
},
});

App.SearchRoute = Ember.Route.extend ({
queryParams : {
도메인: {
refreshModel : true // 전체 μ „ν™˜ 선택
},

},
λͺ¨λΈ : function (params) {
var 도메인 = params.queryParams.domain;

  return $.getJSON('/search?domain=usv.com&name=').then(function(resp){
  console.log(resp);
  return resp.data;
});

},
μž‘μ—… : {
μƒˆλ‘œ κ³ μΉ¨ : function () {
Ember.Logger.log ( 'Route is now refreshing ...');
this.refresh ();
}
},
});

μž μ‹œ λ™μ•ˆ ν•΄κ²° 방법을 μ œκ³΅ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λͺ…ν™•νžˆν•˜κΈ° μœ„ν•΄ : λ‚΄ μ½”λ“œμ˜ this.set ()은 Class 객체λ₯Ό λ³€κ²½ν•˜μ§€λ§Œ URL은 μ „ν˜€ λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이것은 κ³ λŒ€μ΄μ§€λ§Œ μ—¬μ „νžˆ 문제인 것 κ°™μŠ΅λ‹ˆκΉŒ? 상황을 νŒŒμ•…ν•  μˆ˜λŠ” μ—†μ§€λ§Œ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 쿼리 맀개 λ³€μˆ˜λ₯Ό μ„€μ •ν•˜λ €κ³ ν•˜λ©΄ 주기적으둜 URL둜 μ „νŒŒλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 속성 값을 확인할 수 있고 μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ URL이 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. Ember.run.next 을 (λ₯Ό) μ‚¬μš©ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λΉ„μ• !

이 λ¬Έμ œλ„ κ²½ν—˜

@rwjblue : 이것에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λͺ¨λ“  μ—…λ°μ΄νŠΈ? μ—¬κΈ°μ—μ„œ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 값을 λ³€κ²½ν•  λ•Œλ„ url은 λͺ‡ ms λ™μ•ˆ μ—…λ°μ΄νŠΈλ˜κ³  μ»¨νŠΈλ‘€λŸ¬κ°€ λ³€μˆ˜μ— μƒˆ 값이 μžˆλ”λΌλ„ 이전 κ°’μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ„€μ •λœ ν›„ λ‹€μŒ μ‹€ν–‰ λ£¨ν”„μ—μ„œ 쿼리 맀개 λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜λŠ” κ΄€μ°°μžλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. 이 μ˜ˆμ—μ„œλŠ” URLμ—μ„œ token 쿼리 맀개 λ³€μˆ˜λ₯Ό μ œκ±°ν•˜κ³  μ‹Άμ—ˆκ³ μ΄ μ ‘κ·Ό 방식은 잘 μž‘λ™ν•©λ‹ˆλ‹€.

import Ember from 'ember';

export default Ember.Controller.extend({
  queryParams: ['token'],

  token: null,

  unsetToken: Ember.observer('token', function() {
    if (this.get('token')) {
      Ember.run.next(this, function() {
        this.set('token', null);
      });
    }
  }),
});

였늘 λΆ€νŒ…μ‹œ setupControllerμ—μ„œ 쿼리 맀개 λ³€μˆ˜λ₯Ό μ„€μ •ν•˜λ €κ³  ν•  λ•Œ 이것을 λ§Œλ‚¬μŠ΅λ‹ˆλ‹€. run.nextλŠ” ν•΄κ²° λ°©λ²•μ²˜λŸΌ λ³΄μ΄μ§€λ§Œ μ μ ˆν•œ 해결책은 2 개의 경둜λ₯Ό κ°–λŠ” 것이며 λΆ€νŒ…μ‹œ 첫 번째 κ²½λ‘œλŠ” 쿼리 맀개 λ³€μˆ˜ 값을 μ‚¬μš©ν•˜μ—¬ 두 번째 경둜둜 μ „ν™˜ ν•  κ²ƒμž…λ‹ˆλ‹€.

엠버 2.8

λΆ„λ₯˜ 정책에 따라 문제λ₯Ό λΉ„ν™œμ„±μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

λ‚˜λ„ Ember 2.11μ—μ„œμ΄ 문제λ₯Όλ³΄κ³  μžˆλŠ”λ°, μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 쿼리 맀개 λ³€μˆ˜λ₯Ό μ§€μš°λ €κ³  해도 νš¨κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ : 이 λͺ¨λ“  재즈λ₯Ό λ¬΄μ‹œν•˜μ‹­μ‹œμ˜€. μ—¬κΈ°μ—λŠ” λͺ‡ 가지 잘λͺ»λœ / 잘λͺ»λœ 정보가 있으며 @locks λŠ” λ°”λ‘œ μ•„λž˜μ— 동적 μ„Έκ·Έλ¨ΌνŠΈ λŒ€μ‹  쿼리 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 훨씬 더 λ‚˜μ€ μ†”λ£¨μ…˜μ„ μ œμ‹œν–ˆμŠ΅λ‹ˆλ‹€. get μ—μ„œ μ‚­μ œ 및 μ„€μ •ν•˜λŠ” μ„€λ„μš° 계산 속성을 μ‚¬μš©ν•˜μ—¬ 쿼리 맀개 λ³€μˆ˜λ₯Ό 일반 속성에 λ°”μΈλ”©ν•©λ‹ˆλ‹€ (이전 μ‹œλ„μ—λŠ” 쿼리 맀개 λ³€μˆ˜λ₯Ό set 에 μ‚­μ œλ˜κ³  μ„€μ •λœ 계산 된 속성에 λ°”μΈλ”©ν•˜λŠ” 것이 ν¬ν•¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€) . μ†ŒμŒ μ£„μ†‘ν•©λ‹ˆλ‹€!


더 λ‚˜μ€ μ†”λ£¨μ…˜ ...

// app/router.js
Router.map(function() {
  this.route('shop');
});

// app/routes/shop.js
export default Ember.Route.extend({
  queryParams: {
    _selectedItemIndex: {
      replace: true
    }
  }
});

// app/controllers/shop.js
import computed from 'ember-macro-helpers/computed';

export default Ember.Controller.extend({
  cart: Ember.service.inject(),

  queryParams: {
    _selectedItemIndex: 'i'
  },

  _selectedItemIndex: 0,

  selectedItemIndex: computed('_selectedItemIndex', {
    get(index) {
      const itemsLength = this.get('cart.items.length');

      if (isNaN(index) || index < 0 || index >= itemsLength) {
        index = 0;
      }

      return this.set('_selectedItemIndex', index);
    },

    set(index) {
      return this.set('_selectedItemIndex', index);
    }
  })
});


μ›λž˜ λ¬Έμ œμ™€ ν•΄κ²°μ±… ...

λ‚˜λŠ” 2.14- λ² νƒ€μ—μ„œ μ—¬μ „νžˆ μ§€μ†λ˜λŠ”μ΄ 문제둜 μ–΄μ œμ˜ 더 λ‚˜μ€ 뢀뢄을 μžƒμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄ μ‚¬μš© μ‚¬λ‘€λŠ” Ember.Array의 인덱슀둜 μ‚¬μš©ν•  쿼리 맀개 λ³€μˆ˜λ₯Ό μ‚­μ œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν˜•μ‹μ΄ 잘λͺ»λ˜μ—ˆκ±°λ‚˜ (예 : NaN λ˜λŠ” λ¬Έμžμ—΄) λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ 경우 κΈ°λ³Έ 색인을 μ‚¬μš©ν•˜κ³  쑰정을 λ°˜μ˜ν•˜λ„λ‘ URL을 μ—…λ°μ΄νŠΈν•΄μ•Όν•©λ‹ˆλ‹€ (ν–₯ν›„ 클릭에 λŒ€ν•œ 응닡 μ΄λ²€νŠΈκ°€ μ μ ˆν•˜κ²Œ νŠΈλ¦¬κ±°λ˜λ„λ‘ μΆ”κ°€λ‘œ μ„€λͺ… ν•  수 있음). 이것이 λ‹¨μˆœνžˆ μ™Έκ΄€μƒμ˜ λ¬Έμ œκ°€ μ•„λ‹ˆλΌλŠ” 사싀을 μž…μ¦ν•˜λŠ” 데 λ„μ›€μ΄λ©λ‹ˆλ‹€).

이 λ¬Έμ œμ— μ„€λͺ… λœλŒ€λ‘œ URL을 μ—…λ°μ΄νŠΈν•˜μ§€ μ•ŠμœΌλ―€λ‘œ setupController() μ—μ„œ 속성을 μ„€μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€. Ember.run을 μ‚¬μš©ν•˜μ—¬ λ‹€μŒ ν‹±μ—μ„œ μ„€μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ„ˆλ¬΄ 늦게 적용되기 λ•Œλ¬Έμž…λ‹ˆλ‹€ (즉, 잘λͺ»λœ μΈλ±μŠ€κ°€ 이미 배열에 μ•‘μ„ΈμŠ€ν•˜λŠ” 데 μ‚¬μš©λ˜μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€). 속성 변경이 μ—†κΈ° λ•Œλ¬Έμ— ν•œ 번 μ„€μ • ν•œ λ‹€μŒ URL을 μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄ λ‹€μŒ ν‹±μ—μ„œ λ‹€μ‹œ μ„€μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€ (λ˜λŠ” 적어도 이것이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유라고 μƒκ°ν•©λ‹ˆλ‹€).

쿼리 맀개 λ³€μˆ˜λ₯Ό 계산 된 속성에 바인딩 ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ‚­μ œ μ„€μ •μžμ™€ ν•¨κ»˜ 계산 된 속성을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 관찰쀑인 속성을 μ„€μ •ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 일반 속성에 κ΄€μ°°μžλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μœ„μ—μ„œ μ„€λͺ…ν•œ 문제둜 인해 Ember.run에 μ˜΅μ €λ²„λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

# 14606 및 κ΄€λ ¨ 문제둜 인해 setupController() this.transitionTo({ queryParams: .. }) μ—μ„œ setupController() λ˜λŠ” beforeModel() 후크 λ˜λŠ” controller.transitionToRoute({ queryParams: .. }) μ—μ„œ setupController() ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이 쿼리 맀개 λ³€μˆ˜κ°€ λ³€κ²½λ˜λ©΄ λ°˜λ³΅λ˜μ§€ μ•Šμ•„μ•Όν•˜λŠ” model() ν›„ν¬μ—μ„œ λ‹€λ₯Έ μž‘μ—…μ΄ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— 쿼리 맀개 λ³€μˆ˜μ— λŒ€ν•΄ refreshModel 을 true 둜 μ„€μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λΆ„λͺ…νžˆ μ—¬κΈ°μ—λŠ” κ³ ν†΅μ˜ 결합이 μžˆμŠ΅λ‹ˆλ‹€. 이 문제, 문제 # 14606 및 쿼리 맀개 λ³€μˆ˜λ₯Ό 계산 된 속성에 바인딩 ν•  수 μ—†λ‹€λŠ” μ œν•œμ΄ λͺ¨λ‘ κ²°ν•©λ˜μ–΄ κΉ”λ”ν•˜κ³  μ‹€λ§μŠ€λŸ¬μš΄ μž‘μ€ 함정을 λ§Œλ“­λ‹ˆλ‹€.

ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. λ‹¨μˆœνžˆ 쿼리 맀개 λ³€μˆ˜ (λ˜λŠ” μ•„λž˜ μ½”λ“œμ—μ„œμ™€ 같이 동적 μ„Έκ·Έλ¨ΌνŠΈ)λ₯Ό κ°€μ Έ μ™€μ„œμ΄λ₯Ό μ‚­μ œν•˜κ³  λΆ€λͺ¨ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 속성을 μ„€μ •ν•˜λŠ” 쀑첩 된 "선택"경둜λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ‚­μ œ 된 μΈλ±μŠ€κ°€ 경계λ₯Ό λ²—μ–΄λ‚œ 경우 쀑첩 된 인덱슀 경둜둜 μ „ν™˜λ˜κ³ , μ°¨λ‘€λ‘œ κΈ°λ³Έ μΈλ±μŠ€κ°€μžˆλŠ” 쀑첩 된 선택 경둜둜 λ‹€μ‹œ μ „ν™˜λ©λ‹ˆλ‹€. 쀑첩 된 κ²½λ‘œμ—λŠ” ν…œν”Œλ¦Ώμ΄λ‚˜ μ»¨νŠΈλ‘€λŸ¬κ°€μ—†κ³  μƒμœ„ κ²½λ‘œμ—λŠ” μ½˜μ„ΌνŠΈκ°€ μ—†μŠ΅λ‹ˆλ‹€. 이 λΌμš°νŒ… 문제λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλ§Œ μ‘΄μž¬ν•©λ‹ˆλ‹€.

// app/router.js
Router.map(function() {
  this.route('shop', function() {
    this.route('index', { path: '/' });
    this.route('select', { path: '/:index' });
  });
});

// app/routes/shop.js
export default Ember.Route.extend({
  setupController(controller, model) {
    this._super(...arguments);

    // some logic to set up the cart service
  },

  model() {
    // fetch products to shop
  }
});

// app/controllers/shop.js
export default Ember.Controller.extend({
  cart: Ember.service.inject(),

  selectedItemIndex: 0,

  actions: {
    selectItem(index) {
      return this.replaceRoute('shop.select', index);
    }
  }
});

// app/routes/shop/index.js
export default Ember.Route.extend({
  beforeModel() {
    return this.replaceWith('shop.select', 0);
  }
});

// app/routes/shop/select.js
export default Ember.Route.extend({
  setupController(_, { index }) {
    this._super(...arguments);

    const
      parentController = this.controllerFor('shop'),
      itemsLength = parentController.get('cart.items.length');

    index = parseInt(index, 10);
    if (Number.isNaN(index) || index < 0 || index >= itemsLength) {
      return this.replaceWith('shop.index');
    }

    parentController.set('selectedItemIndex', index);
  },

  model: _ => _
});

@mwpastore μ—…λ°μ΄νŠΈμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. 쒋은 주말 λ³΄λ‚΄μ„Έμš”!

@locks μ›ν•˜λŠ” 경우 λ¬Έμ„œ 문제λ₯Ό λ‹€μ‹œ μ—΄μ–΄ setupController 에이 λ₯Ό κΈ°λ‘ν•˜μ‹­μ‹œμ˜€ (예둜

@mwpastore https://discuss.emberjs.com/ 의 ν¬λŸΌμ— κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ— λŒ€ν•œ κ²Œμ‹œλ¬Όμ„ μΆ”κ°€ ν•  μˆ˜μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œλŠ”λ³΄κ³ ν•˜λŠ” 버그λ₯Ό ν•΄κ²°ν•˜κΈ°μœ„ν•œ λŒ€μ²΄ μ†”λ£¨μ…˜μœΌλ‘œ μ’…κ²°λ˜μ—ˆμœΌλ©° ν•΄λ‹Ή μ†”λ£¨μ…˜μ—λŠ” 계산 된 getterμ—μ„œ 속성 섀정이 ν¬ν•¨λ©λ‹ˆλ‹€.

이것에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.

Route의 setupController λ‚΄μ—μ„œ Ember.run.next μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰