Vaadin-combo-box: 콀보 μƒμž μ•„μ΄ν…œ μŠ€νƒ€μΌλ§

에 λ§Œλ“  2019λ…„ 03μ›” 28일  Β·  8μ½”λ©˜νŠΈ  Β·  좜처: vaadin/vaadin-combo-box

콀보 μƒμž ν•­λͺ©μ—μ„œ μ™ΈλΆ€ μŠ€νƒ€μΌμ„ μ‚¬μš©ν•˜κ³  μ‹Άμ§€λ§Œ ν•­λͺ©μ΄ μ„€λ„μš° 돔 내에 있기 λ•Œλ¬Έμ— μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ꡬ체적인 μ‹œλ‚˜λ¦¬μ˜€λŠ” flag-icon-cssλ₯Ό μ‚¬μš©ν•˜μ—¬ μ–Έμ–΄ 선택 콀보 μƒμžμ— ν”Œλž˜κ·Έ μ•„μ΄μ½˜μ„ ν‘œμ‹œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν”Œλž˜κ·Έλ₯Ό ν‘œμ‹œν•˜λ €λ©΄ flag-icon-css μŠ€νƒ€μΌμ˜ 일뢀 CSS ν΄λž˜μŠ€κ°€ μžˆλŠ” span νƒœκ·Έλ₯Ό μ μš©ν•΄μ•Ό ν•˜μ§€λ§Œ shadow DOM으둜 인해 μ„ νƒλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 콀보 μƒμž ν•­λͺ©μ€ ListBoxμ—μ„œμ™€ 같이 "슬둯"이어야 ν•©λ‹ˆκΉŒ? ListBox ν•­λͺ©μ˜ 경우 ν”Œλž˜κ·Έ μ•„μ΄μ½˜μ„ ν‘œμ‹œν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

μ΅œκ·Όμ— stackoverflow에 λŒ€ν•œ μ§ˆλ¬Έμ„ μ—΄μ—ˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ https://stackoverflow.com/questions/55170886 을 μ°Έμ‘°

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

μ‚¬μš© κ°€λŠ₯ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

μ™ΈλΆ€ μŠ€νƒ€μΌμ€ shadow DOM에 μΉ¨νˆ¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— shadow DOM 내뢀에 CSS νŒŒμΌμ„ 가져와야 ν•©λ‹ˆλ‹€.

μ•„λ§ˆλ„ 이 StackOverflow μŠ€λ ˆλ“œκ°€ 도움

ν•΄λ‹Ή μŠ€λ ˆλ“œμ˜ 두 번째 닡변을 기반으둜 <link rel="stylesheet"> λŠ” shadow DOM λ‚΄λΆ€μ—μ„œ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ‹€μŒκ³Ό 같은 것이 ComponentRenderer μ—μ„œ μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Element link = new Element("link");
link.setAttribute("rel", "stylesheet");
link.setAttribute("href", "./frontend/bower_components/flag-icon-css/css/flag-icon.min.css");
item.getElement().appendChild(link);

...λ˜λŠ” 첫 번째 λ‹΅λ³€μ—μ„œ μ œμ•ˆν•œ @import :

Element style = new Element("style");
style.setProperty("innerHTML", "<strong i="15">@import</strong> \"./frontend/bower_components/flag-icon-css/css/flag-icon.min.css\"");
item.getElement().appendChild(style);

ν•˜μ§€λ§Œ 이 μŠ€λ‹ˆνŽ«μ„ 직접 ν…ŒμŠ€νŠΈν•˜μ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@steffen-harbich-itc, μ΄λŸ¬ν•œ μ ‘κ·Ό 방식 쀑 ν•˜λ‚˜ λ˜λŠ” λ‹€λ₯Έ 방법을 μ‚¬μš©ν•˜μ—¬ μž‘λ™ν•˜λ„λ‘ κ΄€λ¦¬ν–ˆμŠ΅λ‹ˆκΉŒ? λ“£κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. :)

λ‚˜λŠ” λ‹Ήμ‹ μ˜ 두 번째 μ œμ•ˆμ„ μ‹œλ„ν–ˆκ³  νš¨κ³Όκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 첫 번째 접근을 μ‹œλ„ν•˜μ§€ μ•Šμ•˜λ‹€. κ·ΈλŸ¬λ‚˜ λ‚΄ shared-styles.html에 " @import ..."λ₯Ό μΆ”κ°€ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€.

 <dom-module id="my-combo-box-theme" theme-for="vaadin-combo-box">
   <template>
     <style>...

ν•˜μ§€λ§Œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ 이 λ¬Έμ œμ— λŒ€ν•œ ν•΄κ²° 방법을 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ IMOμ—λŠ” μ—¬μ „νžˆ ListItemκ³Ό λŒ€μ‘°μ μœΌλ‘œ bahavior와 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 것이 μžˆμŠ΅λ‹ˆλ‹€.

적어도 ν•˜λ‚˜μ˜ μ ‘κ·Ό 방식이 νš¨κ³Όκ°€ μžˆλ‹€λŠ” μ†Œμ‹μ„ λ“£λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€!

곡유 μŠ€νƒ€μΌ μ ‘κ·Ό 방식에 λŒ€ν•΄: theme-for="vaadin-combo-box-item" μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 이것이 μŠ€νƒ€μΌμ΄ μ‚½μž…λ˜μ–΄μ•Ό ν•˜λŠ” μš”μ†Œμ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 λ Œλ”λŸ¬λŠ” vaadin-combo-box-item 와 μΆ”κ°€λœ ꡬ성 μš”μ†Œ 사이에 μΆ”κ°€ μ›Ή ꡬ성 μš”μ†Œ(λ”°λΌμ„œ μ„€λ„μš° 루트)λ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— ComponentRenderer μ—μ„œλŠ” μ—¬μ „νžˆ μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•­λͺ©μ˜ μŠ€νƒ€μΌμ„± 및 ν•­λͺ©μ΄ Shadow DOM 내뢀에 μžˆμ–΄μ•Ό ν•˜λŠ”μ§€ μ—¬λΆ€λŠ” μ›Ή ꡬ성 μš”μ†Œμ™€ 관련이 μžˆμœΌλ―€λ‘œ(이 μ €μž₯μ†Œμ—λŠ” ν•΄λ‹Ή ν•­λͺ©μ— λŒ€ν•œ Java 래퍼만 ν¬ν•¨λ˜μ–΄ 있음) 이 티켓을 vaadin-combo-box μ €μž₯μ†Œλ‘œ μ΄λ™ν•˜κ² μŠ΅λ‹ˆλ‹€.

이λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ˜¬λ°”λ₯Έ 방법은 λ‹€μŒκ³Ό 같이 dom-module λ₯Ό λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€.

<dom-module id="my-item-css" theme-for="vaadin-combo-box-item">
  <template>
    <style>
    /* styles from flag-icons.css */
    </style>
  </template>
</dom-module>

@import μ‚¬μš©ν•˜λ©΄ μž‘λ™μ΄ 보μž₯λ˜μ§€ μ•ŠμœΌλ©° ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•œ μ‰¬μš΄ μˆ˜μ • 사항은 μ—†μœΌλ©° vaadin-combo-box ꡬ성 μš”μ†Œμ—λ§Œ κ΅­ν•œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
μƒˆ λ¬Έμ„œ μ‚¬μ΄νŠΈμ—μ„œ shadow DOM 및 μ™ΈλΆ€ CSS의 μ œν•œ 사항을 λ¬Έμ„œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

그렇지 μ•ŠμœΌλ©΄ μ—¬κΈ°μ—μ„œ μš°λ¦¬κ°€ ν•  일이 μ—†μŠ΅λ‹ˆλ‹€. 버그가 μ•„λ‹ˆλ―€λ‘œ λ‹«κ² μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ—¬μ „νžˆ 콀보 μƒμž ν•­λͺ©μ΄ shadow DOM 내에 λ°°μΉ˜λ˜μ§€ μ•Šκ³  λ³„λ„μ˜ μŠ¬λ‘―μ— λ°°μΉ˜λ˜μ–΄μ•Ό ν•œλ‹€κ³  μ˜ˆμƒν•©λ‹ˆλ‹€.

콀보 μƒμž ν•­λͺ©μ€ shadow DOM 내에 λ°°μΉ˜λ˜μ§€ μ•Šκ³  λ³„λ„μ˜ μŠ¬λ‘―μ— λ°°μΉ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

이것은 λ‹€μŒ μ£Όμš” λ¦΄λ¦¬μŠ€μ—μ„œ 잠재적인 μ£Όμš” λ³€κ²½ μ‚¬ν•­μœΌλ‘œ κ°„μ£Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•­λͺ©μ„ λ…ΈμΆœν•˜λŠ” 것은 가상 슀크둀러 ꡬ성 μš”μ†Œμ™€ ν•¨κ»˜ μž‘λ™ν•˜λŠ” λ°©μ‹μœΌλ‘œ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€( iron-list μ—μ„œ λ‹€λ₯Έ κ²ƒμœΌλ‘œ ν™•μ‹€νžˆ 변경됨 - κ²°μ •ν•΄μ•Ό 함).

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