Ember.js: 값이 nullμ΄κ±°λ‚˜ μ •μ˜λ˜μ§€ μ•Šμ€ 쿼리 맀개 λ³€μˆ˜λŠ” λ¬Έμžμ—΄λ‘œ μ§λ ¬ν™”λ©λ‹ˆλ‹€.

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

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

_ λˆ„κ΅¬λ‚˜ ꡬ글을 톡해 찾을 경우 _

이 λ¬Έμ œλŠ” 기본적으둜 ν•΄κ²°λ˜μ—ˆμ§€λ§Œ 쿼리 맀개 λ³€μˆ˜κ°€ μ»¨νŠΈλ‘€λŸ¬μ— μ„€μ •λ˜μ§€ μ•Šμ€ 경우 null λ₯Ό 'null' 둜 μ§λ ¬ν™”ν•˜λŠ” κ²½μš°κ°€ 남아 μžˆμŠ΅λ‹ˆλ‹€.

var AnimalsController = Ember.Controller.extend({

  queryParams: ['myCat']
  // myCat: null // deliberately not set, to illustrate the issue

});

export default AnimalsController;

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

이것을 좔적 ν•΄μ€€ @denisnazarov μ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

ping seΓ±or @machty

@machty μš°λ¦¬λŠ” 이것에 λ‹Ήμ‹ μ˜ 도움을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€

κ·Έλž˜μ„œ 어젯밀에이 문제λ₯Ό κ²ͺ은 후에 이것이 μ™„μ „νžˆ λ°”λžŒμ§ν•˜μ§€ μ•Šμ€μ§€ ν™•μ‹  ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ‹€μŒ μ»¨νŠΈλ‘€λŸ¬κ°€ μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

App.MyController = Ember.Controller.extend({
  queryParams: ['filters'],
  filters: ['starred']
});

filters λ₯Ό null ν•˜κ³  νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œ 고치면 μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ? null λ₯Ό URL에 seralizeν•˜μ§€ μ•ŠμœΌλ©΄ 컨트둀러 속성이 κΈ°λ³Έκ°’μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.

이것은 거짓 κ°’κ³Ό κ±°μ§“μ˜ μ‹€μ œ κ°’ 사이에 λͺ¨ν˜Έν•˜λ‹€λŠ” 이전 κ΅¬ν˜„μ˜ λ¬Έμ œμ™€ μœ μ‚¬ν•©λ‹ˆλ‹€. 이제 defaultValue 와 null λ˜λŠ” undefined μ‚¬μ΄μ—μ„œ λͺ¨ν˜Έν•΄ λ³΄μž…λ‹ˆλ‹€.

λ‹€μŒμ€ λΆ€μšΈ 쿼리 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 또 λ‹€λ₯Έ μ˜ˆμž…λ‹ˆλ‹€. http://emberjs.jsbin.com/hamev/2/edit

기본값이 null 둜 μ„€μ •λ˜μ–΄μžˆλŠ” 경우 true λ˜λŠ” false μ„€μ •ν•˜λ©΄ μ‹€μ œλ‘œ 'true' λ˜λŠ” 'false' λ¬Έμžμ—΄ λ²„μ „μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€

@HeroicEric κ·Έλž˜μ„œ 그것이 평생 λ™μ•ˆ λΆ€μšΈ true / false κ°€ 될 것이라면 null 둜 μ„€μ •ν•˜λŠ” 섀득λ ₯μžˆλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

잘λͺ» λ‚˜μ™”μ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이 λͺ¨λ“  직렬화 μ½”λ„ˆ 사둀에 λŒ€ν•œ μ‚¬μš© 사둀가 무엇인지 κΆκΈˆν•©λ‹ˆλ‹€.

@machty jsbin μ—μ„œ 예제 μ‚¬μš© 사둀λ₯Ό 보여 μ£Όλ €κ³ ν–ˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ‚¬μš©μž λͺ©λ‘μ„ ν‘œμ‹œν•˜κ³  μžˆλŠ”λ° λͺ©λ‘μ— λͺ¨λ“  μ‚¬μš©μž, κ΄€λ¦¬μž λ˜λŠ” λΉ„ 관리 μ‚¬μš©μžκ°€ ν¬ν•¨λ˜λ„λ‘ 필터링 ν•  수 있기λ₯Ό μ›ν•©λ‹ˆλ‹€. λͺ¨λ“  μ‚¬μš©μžλ₯Όλ³΄κ³  싢을 λ•Œ 기본적으둜 ν•„ν„°λ₯Ό μ œκ±°ν•˜λ©΄λ©λ‹ˆλ‹€.

이와 같은 상황이 쿼리 맀개 λ³€μˆ˜μ˜ μ˜λ―Έκ°€ μ•„λ‹™λ‹ˆκΉŒ?

μ΄μƒμ μœΌλ‘œ URL은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

/ users λŠ” λͺ¨λ“ 
/ users? admin = true λŠ” λͺ¨λ“  κ΄€λ¦¬μžλ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.
/ users? admin = false λŠ” κ΄€λ¦¬μžκ°€ μ•„λ‹Œ λͺ¨λ“  μ‚¬μš©μžλ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

@HeroicEric @machty 컨트둀러의 defaultValueκ°€ μ •μ˜λ˜μ§€ μ•Šμ€ 경우 ( null λ˜λŠ” undefined ) 기본적으둜 λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜λŠ” 것이 아이디어라고 μƒκ°ν•©λ‹ˆλ‹€. 이것은 직렬화가 λ¬Έμžμ—΄λ‘œ κΈ°λ³Έ μ„€μ •λ˜κΈ° λ•Œλ¬Έμ— true 및 false κ°€ λ¬Έμžμ—΄ λ²„μ „μœΌλ‘œ λλ‚˜λŠ” 이유λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.

속성을 null 둜 μ„€μ •ν•˜λ €λ©΄ λ‹€λ₯Έ κ³³μ—μ„œ μœ ν˜•μ„ κ°€μ Έμ™€μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. @machty κ°€ queryParams ꡬ성에 μœ ν˜•μ„ μΆ”κ°€ ν•  μˆ˜μžˆλŠ” 쒋은 μ΄μœ μž…λ‹ˆκΉŒ?

이 경우 μœ ν˜•μ„ 'boolean '둜 μ„€μ •ν•˜κ³  기본값을 null μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 JSBin μ˜ˆμ œκ°€ μžˆλŠ”λ° λ‚΄κ°€λ³΄κ³ μžˆλŠ” 것이이 λ¬Έμ œμ™€ 관련이 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.

http://jsbin.com/dipajezi/1/edit

기본적으둜이 foo 쿼리 맀개 λ³€μˆ˜μ™€ null 기본값이 있으며 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λ  λ•Œ λͺ¨λΈ 후크가 처음 호좜 될 λ•Œ 맀개 λ³€μˆ˜ 값은 null . 맀개 λ³€μˆ˜ 값이 null 이면 "κ°’ μ—†μŒ"을 μ˜λ―Έν•˜λ―€λ‘œμ΄ 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„λ₯Ό μΏΌλ¦¬ν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€.

검색어 : ?page=1

NextPage λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ λ‹€μ‹œ μ „ν™˜ν•˜μ§€λ§Œ μ΄λ²ˆμ—λŠ” page 쿼리 맀개 λ³€μˆ˜λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” foo 쿼리 맀개 λ³€μˆ˜μ˜ λ¬Έμžμ—΄ 값이 "null" 인데, λ‹€μ†Œ μ΄μƒν•©λ‹ˆλ‹€. 이 κ²½μš°μ—λ„ 맀개 λ³€μˆ˜μ— 값이 μ—†λŠ”μ§€ μ‰½κ²Œ 확인할 수 μžˆλ„λ‘ null 값을 κ°–κ³  싢을 κ²ƒμž…λ‹ˆλ‹€.

쿼리 : ?page=1 및 ?page=1&foo=null μ•„λ‹˜

λ§ˆμ§€λ§‰μœΌλ‘œ ChangeFoo λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ λ‹€μ‹œ μ „ν™˜ν•˜μ—¬ μ΄λ²ˆμ—λŠ” foo 쿼리 맀개 λ³€μˆ˜μ˜ 값을 μ›ν•˜λŠ” κ°’μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€. 이제 값이 null이 μ•„λ‹ˆλ―€λ‘œμ΄ 값을 μ‚¬μš©ν•˜μ—¬ 쿼리 λ¬Έμžμ—΄μ„ ꡬ성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

쿼리 ?page=1&foo=3

@raytiley 방금 https://github.com/raytiley/ember.js/commit/26a3f8569edb58f8644ce4f9cec7000276c327a6#diff -0631ecfe6138cf2c2eb2d94369c3e846R1640에 λ©”λͺ¨λ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

qpλ₯Ό null λͺ…μ‹œ 적으둜 μ„€μ •ν•˜λ©΄ λͺ¨λΈ ν›„ν¬μ˜ λ¬Έμžμ—΄λ‘œ μΊμŠ€νŒ…λ©λ‹ˆλ‹€. null λŠ” "κ°’ μ—†μŒ"을 λ‚˜νƒ€λ‚΄μ•Όν•˜κ³  개인이 null λ¬Έμžμ—΄μ„ μ›ν•˜λ©΄ null 값을 기반으둜 생성 ν•  수 있기 λ•Œλ¬Έμ— 이것은 μ˜³μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€.

그렇지 μ•ŠμœΌλ©΄ κ°’λ§ŒμžˆλŠ” QPλ₯Ό μ „λ‹¬ν•˜λ €λ©΄ params.myQP && params.myQp !== "null" ..

λ‚˜λŠ” 이것이 ꡬ식이라고 μƒκ°ν•˜μ§€λ§Œ λˆ„κ΅°κ°€ λ‹€μŒ ember.jsλ₯Ό μ‚¬μš©ν•˜λŠ” JSBinμ—μ„œ 문제λ₯Ό μž…μ¦ ν•  수 μžˆλ‹€λ©΄ λ‹€μ‹œ 열릴 κ²ƒμž…λ‹ˆλ‹€. http://s3.amazonaws.com/machty/to_s3_uploads/ember-9fbe6c2a-c124-5c2e-0414 -f5ed36c2a1a2.js

_ λˆ„κ΅¬λ‚˜ ꡬ글을 톡해 찾을 경우 _

이 λ¬Έμ œλŠ” 기본적으둜 ν•΄κ²°λ˜μ—ˆμ§€λ§Œ 쿼리 맀개 λ³€μˆ˜κ°€ μ»¨νŠΈλ‘€λŸ¬μ— μ„€μ •λ˜μ§€ μ•Šμ€ 경우 null λ₯Ό 'null' 둜 μ§λ ¬ν™”ν•˜λŠ” κ²½μš°κ°€ 남아 μžˆμŠ΅λ‹ˆλ‹€.

var AnimalsController = Ember.Controller.extend({

  queryParams: ['myCat']
  // myCat: null // deliberately not set, to illustrate the issue

});

export default AnimalsController;

@HeroicEric 의 μ‚¬μš© 사둀와 κ΄€λ ¨ν•˜μ—¬ μ»¨νŠΈλ‘€λŸ¬λŠ” 수λͺ… λ™μ•ˆ 값이 무엇인지에 따라 지λŠ₯적으둜 μ§λ ¬ν™”ν•˜λŠ” 방법을 μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€. 이것은 μ΅œμ‹  버전 (2.6)μ—μ„œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

export default Ember.Controller.extend({
  queryParams: [{ 
     redevelopment: { 
         type: 'boolean' 
     } 
  }],
  redevelopment: null
});

μΌν•˜λŠ” 엠버 twiddle : https://ember-twiddle.com/3afa1091106a91ce2c1734ae2998bc3f?openFiles=controllers.application.js%2C&route=%2F%3Fredevelopment%3Dtrue

QPλŠ” μ–Έμ œλΆ€ν„° μœ ν˜• 섀정을 ν—ˆμš©ν•©λ‹ˆκΉŒ? μ•„λ‹ˆλ©΄ μƒˆλ‘œμš΄ APIλ₯Ό μ œμ•ˆν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

λ¬Έμ„œν™”λ˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. μ—¬κΈ°λ₯Ό 보면 μž¬μ •μ˜ 될 μˆ˜μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

였, λ©‹μ§€λ„€μš”!

κ°μ‚¬ν•©λ‹ˆλ‹€, @allthesignals , κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ— 맀우 μœ μš©ν•©λ‹ˆλ‹€.

이 μ†”λ£¨μ…˜μ€ μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

{ key: undefined } ~ ? _ (미포함) _
{ key: null } ~ ?key
{ key: '' } ~ ?key=
{ key: 'null' } ~ ?key=null

쒋은 λͺ©λ‘!

λ‚˜λŠ” 이것에 νˆ¬ν‘œ ν•  것이닀 :
{ key: undefined } ~ [nothing] _ (미포함) _
{ key: null } ~ [nothing] _ (미포함) _
{ key: '' } ~ ?key
{ key: 'null' } ~ ?key=null

그리고 μ•„λ§ˆλ„ :

{ key: false } ~ [nothing] _ (미포함) _
{ key: true } ~ ?key

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