<p>vaadin-combo-boxλ₯Ό paper-dialog μ•ˆμ— λ°°μΉ˜ν•˜λ©΄ κ²½μš°μ— 따라 λŒ€ν™” μƒμžκ°€ λ‹«νž™λ‹ˆλ‹€.</p>

에 λ§Œλ“  2017λ…„ 02μ›” 21일  Β·  19μ½”λ©˜νŠΈ  Β·  좜처: vaadin/vaadin-combo-box

μ„€λͺ…

vaadin-combo-box μš”μ†Œκ°€ paper-dialog 내뢀에 μžˆμ„ λ•Œ μ‚¬μš©μžκ°€ 선택 μƒμžλ₯Ό μ—΄λ©΄(μ„ νƒν•˜μ§€ μ•Šκ³  κ·Έλƒ₯ μ—΄λ¦° μƒνƒœλ‘œ λ‘‘λ‹ˆλ‹€) λŒ€ν™” μƒμžμ˜ 아무 κ³³μ΄λ‚˜ ν΄λ¦­ν•˜λ©΄ λŒ€ν™” μƒμžκ°€ λ‹«νž™λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” κ²°κ³Ό

λŒ€ν™” μƒμžμ˜ 아무 κ³³μ΄λ‚˜ ν΄λ¦­ν•˜λ©΄(μ™Όμͺ½ 상단 λͺ¨μ„œλ¦¬μ— 있음) μƒμžλŠ” λ‹«νžˆμ§€λ§Œ λŒ€ν™” μƒμžλŠ” μ—΄μ–΄ λ‘‘λ‹ˆλ‹€.

μ‹€μ œ κ²°κ³Ό

λŒ€ν™” μƒμžμ˜ 아무 κ³³μ΄λ‚˜ ν΄λ¦­ν•˜λ©΄ 전체 λŒ€ν™” μƒμžκ°€ λ‹«νž™λ‹ˆλ‹€.

라이브 데λͺ¨

https://jsfiddle.net/ribe/02tntfn3/2/

μž¬ν˜„ 단계

  1. λŒ€ν™” μƒμžλ₯Ό μ—΄κ³ ,
  2. μƒμžλ₯Ό μ—΄κ³  μ„ νƒν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. μ—΄λ¦° μƒνƒœλ‘œ λ‘μ‹­μ‹œμ˜€.
    3. λŒ€ν™” μƒμžμ˜ μ™Όμͺ½ 상단 λͺ¨μ„œλ¦¬λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.

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

참고둜, 이것은 마우슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 콀보 μƒμžμ—μ„œ ν•­λͺ©μ„ μ„ νƒν•˜λŠ” κ²½μš°μ—λ„ λ°œμƒν•©λ‹ˆλ‹€...

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

이벀트 μ „νŒŒμ— μΌμ’…μ˜ 버그가 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ Escλ₯Ό 눌러 vaadin-combo-box λ₯Ό λ‹«μœΌλ©΄ λŒ€ν™” μƒμžλ„ λ‹«νž™λ‹ˆλ‹€. μ΄λŸ¬ν•œ 경우 일반적으둜 on-keydown="_stopPropagation" 와 같은 것을 μ‚¬μš©ν•˜κ³  λ‹€μŒκ³Ό 같은 처리기λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

_stopPropafation: function (e) {
  e.stopPropagation()
}

IronA11yKeysBehavior μ—μ„œ μ œκ³΅ν•˜λŠ” stopKeyboardEventPropagation 속성도 μžˆμ§€λ§Œ ν•΄λ‹Ή λ™μž‘μ€ vaadin-combo-box 에 μ˜ν•΄ κ΅¬ν˜„λ˜μ§€ μ•Šκ³  ν•΄λ‹Ή 속성이 일뢀 λ‹€λ₯Έ μš”μ†Œμ— λŒ€ν•΄ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 이벀트λ₯Ό λ„ˆλ¬΄ 늦게 μ²˜λ¦¬ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

주어진 Fiddleμ—μ„œ stopPropagation λ₯Ό ν˜ΈμΆœν•˜λŠ” 이벀트λ₯Ό λ°°μΉ˜ν•  μœ„μΉ˜λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ–΄λ–€ 아이디어라도?

μ•ˆλ…•ν•˜μ„Έμš”!

μ—¬κΈ°μ„œ λ¬Έμ œλŠ” <vaadin-combo-box> <paper-dialog> <body> μ•„λž˜μ— λ°°μΉ˜λ˜μ–΄ 콀보 μƒμžμ˜ μ˜€λ²„λ ˆμ΄μ— λŒ€ν•œ λͺ¨λ“  클릭을 "μ™ΈλΆ€ 클릭"으둜 κ°„μ£Όν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. ", 기본적으둜 λŒ€ν™” μƒμžλ₯Ό λ‹«μŠ΅λ‹ˆλ‹€.

ν•΄κ²° λ°©λ²•μœΌλ‘œ 콀보 μƒμžκ°€ μ—΄λ € μžˆμ„ λ•Œ μ™ΈλΆ€ 클릭을 λΉ„ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

...
<vaadin-combo-box id="third" label="Focus Third" tabindex="3" on-focus="_focusInput" items="[[items]]" on-blur="_onBlur" on-opened-changed="_onComboBoxOpened">
        </vaadin-combo-box>

<script>
...
_onComboBoxOpened: function(e) {
  if (e.detail.value) {
    this.$.add_row_details_dialog.noCancelOnOutsideClick = true;
  } else {
    this.async(function() {
      this.$.add_row_details_dialog.noCancelOnOutsideClick = false;
    }, 10);
  }
}
...
</script>

@Saulis , λΆˆν–‰νžˆλ„ λ‹Ήμ‹ μ˜ μ ‘κ·Ό 방식은 μ €μ—κ²Œ νš¨κ³Όκ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 쒅이 λŒ€ν™” μƒμžμ—μ„œ noCancelOnOutsideClick 속성을 true둜 μ„€μ •ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆλ‹€(이 경우 λŒ€ν™” μƒμž μ™ΈλΆ€λ₯Ό 클릭할 λ•Œ λŒ€ν™” μƒμžλ₯Ό 닫을 ν•„μš”κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€).

참고둜, 이것은 마우슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 콀보 μƒμžμ—μ„œ ν•­λͺ©μ„ μ„ νƒν•˜λŠ” κ²½μš°μ—λ„ λ°œμƒν•©λ‹ˆλ‹€...

paper-dialog μš”μ†Œμ— 'no-cancel-on-outside-click'을 μ μš©ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ vaadin-combo-boxμ—μ„œ 마우슀 ν΄λ¦­μ΄λ‚˜ ν‚€λ³΄λ“œλ‘œ μš”μ†Œλ₯Ό 선택할 λ•Œ λŒ€ν™” μƒμžκ°€ λ‹«νžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

<paper-dialog no-cancel-on-outside-click> <vaadin-combo-box class="elements-box" items="[[arrayOfValues]]"></vaadin-combo-box> </paper-dialog>

@kito99 / @artem-vladimirov의 no-cancel-on-outside-click을 μ‚¬μš©ν•œ ν•΄κ²° 방법은 μ‚¬μš©μžκ°€ μ™ΈλΆ€ 클릭으둜 λŒ€ν™” μƒμžλ₯Ό 닫을 수 있기λ₯Ό μ›ν•˜κΈ° λ•Œλ¬Έμ— 일반적으둜 λ˜λŠ” μ €μ—κ²Œ μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (κ·ΈλŸ¬λ‚˜ 그것이 μš”κ΅¬ 사항이 μ•„λ‹Œ 경우 μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€).

또 λ‹€λ₯Έ (μœ μ‚¬ν•œ) ν•΄κ²° 방법은 iron-overlay-canceled 이벀트λ₯Ό μˆ˜μ‹ ν•œ λ‹€μŒ event.stopPropagation() 및 event.preventDefault() λ₯Ό ν˜ΈμΆœν•˜λŠ” κ²ƒμ΄μ§€λ§Œ λ‹€λ₯Έ ν•΄κ²° 방법과 λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λŒ€ν™” μƒμžλ₯Ό 닫을 수 μ—†μŠ΅λ‹ˆλ‹€. λ°°κ²½ 클릭에.

λ‚˜λŠ” 두 이벀트λ₯Ό μ„œλ‘œ κ΅¬λ³„ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ μ§€κΈˆκΉŒμ§€λŠ” 운이 μ—†μŠ΅λ‹ˆλ‹€.

ν•­λͺ©μ„ μ„ νƒν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ λŒ€ν™” μƒμžκ°€ λ‹«νžˆκ³  쒅이 λŒ€ν™” μƒμžλ₯Ό ν΄λ¦­ν•˜μ—¬ 선택을 μ·¨μ†Œν•˜λŠ” 것도 λ§ˆμ°¬κ°€μ§€λΌλŠ” @kito99 의 관찰을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ν•˜λ‹€:

λ‚˜λŠ” λ‹€μŒκ³Ό 같은 ν•΄κ²° 방법을 생각해 λƒˆμŠ΅λ‹ˆλ‹€.

        listeners: {
          "iron-overlay-canceled": "onCanceled",
        },
        onCanceled(event) {
            const paperDialogHoverElement = document.querySelector("paper-dialog:hover");
            const vaadinHoverElement = document.querySelector("vaadin-combo-box-overlay:hover");
            if (paperDialogHoverElement || vaadinHoverElement) {
                event.stopPropagation();
                event.preventDefault();
            }
        }

즉, μ»€μ„œκ°€ 쒅이 λŒ€ν™” μƒμž λ˜λŠ” μ˜€λ²„λ ˆμ΄ μš”μ†Œμ— μžˆλŠ” κ²½μš°μ—λ§Œ μ΄λ²€νŠΈκ°€ μ·¨μ†Œλ©λ‹ˆλ‹€. 이 ν•΄κ²° 방법을 μ‚¬μš©ν•˜λ©΄ λ“œλ‘­λ‹€μš΄ 값을 μ„ νƒν•˜κ³  μ™ΈλΆ€ 클릭으둜 λŒ€ν™” μƒμžλ₯Ό λ‹«κ³  μ΄μŠ€μΌ€μ΄ν”„ λ²„νŠΌμœΌλ‘œ λŒ€ν™” μƒμžλ₯Ό 닫을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. Chrome 및 Firefoxμ—μ„œ ν…ŒμŠ€νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μƒˆ 버전을 κΈ°λ‹€λ¦¬λŠ” 것 외에 μ—¬κΈ°μ„œ ν•  일이 μžˆμŠ΅λ‹ˆκΉŒ? 곡식 vaadin ν•΄κ²° 방법?

μ™œ 이 문제λ₯Ό μ˜€λž«λ™μ•ˆ μ™„μ „νžˆ λ†“μ³€λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 이것은 정말 근본적인 μ‚¬μš©μ„± 문제이며 빨리 μˆ˜μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. @Saulis λ˜λŠ” 개발 νŒ€μ˜ λ‹€λ₯Έ λˆ„κ΅°κ°€κ°€ 이번 μ£Όλ‚˜ λ‹€μŒ 주에 μ‚΄νŽ΄λ³΄λ„λ‘ μ˜κ°μ„ 쀄 수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„, iron-overlay-cancel 브랜치λ₯Ό μ‚¬μš©ν•΄λ³΄μ‹­μ‹œμ˜€ (λΆˆν–‰νžˆλ„ ν˜„μž¬ λ§ˆμŠ€ν„° μœ„μ— κ΅¬μΆ•λ˜μ—ˆμœΌλ―€λ‘œ ν•˜μ΄λΈŒλ¦¬λ“œ 인 경우 쒅속성 μΆ©λŒμ΄μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. depsλ₯Ό 2.0-preview 둜 ν•΄κ²°ν•˜κ³  Polymerλ₯Ό μ–΄λŠ μͺ½μ΄λ“  μ›ν•˜λ‹€)

λ˜ν•œ 1.x λΆ„κΈ°( iron-overlay-cancel-v1 ) μƒλ‹¨μ—μ„œ λ³€κ²½ 사항을 μ„ νƒν–ˆμ§€λ§Œ ν˜„μž¬ Polymer 2 λ°”μš°μ–΄ 섀정을 μ—‰λ§μœΌλ‘œ λ§Œλ“€κ³  싢지 μ•ŠκΈ° λ•Œλ¬Έμ— 슀슀둜 μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μ—†μŠ΅λ‹ˆλ‹€. -)

μ—…λ°μ΄νŠΈ: 이 μˆ˜μ • 사항은 iron-overlay-behavior v1.10.3 μ΄μƒμ—μ„œλ§Œ μž‘λ™ν•©λ‹ˆλ‹€.

@GoceRibeski @web-padawan @kito99 @artem-vladimirov @panuhorsmalahti @timoteoponce λˆ„κ΅¬λ“ μ§€ μˆ˜μ •μ„ μ‹œλ„ν•  κΈ°νšŒκ°€ μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

@Saulis μƒκΈ°μ‹œμΌœ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 방금 iron-overlay-cancel-v1 λΆ„κΈ°λ₯Ό 작고 κ²½κ³ λ₯Ό λ΄…λ‹ˆλ‹€.

[vaadin-combo-box::_createEventHandler]: listener method `_onBlur` not defined

λ”°λΌμ„œ paper-dialog 및 λ‚΄λΆ€ vaadin-combo-box λ₯Ό λͺ¨λ‘ μ—° ν›„ 두 가지λ₯Ό μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.

  1. Esc ν‚€λ₯Ό λˆ„λ₯΄λ©΄ 콀보 μƒμž μ˜€λ²„λ ˆμ΄κ°€ μ—΄λ € μžˆλŠ” λ™μ•ˆ λŒ€ν™” μƒμžκ°€ λ‹«νžˆκ³ ,
  2. ν•­λͺ©μ„ μ„ νƒν•˜λ©΄ λŒ€ν™” μƒμžμ™€ 콀보 μƒμžκ°€ λͺ¨λ‘ λ‹«νž™λ‹ˆλ‹€.

μ§€κΈˆ 쑰사할 μ‹œκ°„μ΄ λ§Žμ§€ μ•Šμ§€λ§Œ, μ²­μ·¨μžκ°€ λˆ„λ½λœ 것이 원인일 수 μžˆμŠ΅λ‹ˆλ‹€.

@web-padawan κ°μ‚¬ν•©λ‹ˆλ‹€! λˆ„λ½λœ _onBlur 에 λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. λ¦¬μŠ€λ„ˆλŠ” μ˜λ„μ μœΌλ‘œ μ œκ±°λ˜μ—ˆμ§€λ§Œ μ‹€μˆ˜λ‘œ λ¦¬μŠ€λ„ˆ 바인딩을 μ œμžλ¦¬μ— λ‘μ—ˆμŠ΅λ‹ˆλ‹€. κ·€ν•˜κ°€ λ³΄κ³ ν•œ 문제λ₯Ό λ‹€μ‹œ ν…ŒμŠ€νŠΈν•΄μ•Ό ν•©λ‹ˆλ‹€. v1 λΆ„κΈ°λ₯Ό 직접 ν…ŒμŠ€νŠΈν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@web-padawan iron-overlay-cancel μ—μ„œ Polymer 2.x 및 iron-overlay-cancel-v1 Polymer 1.9.1 iron-overlay-behavior μ—μ„œ μˆ˜μ • 사항이 μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. v1.10.3 이상 μ„€μΉ˜( 2.0.0 μ‹€ν–‰ 쀑)

@Saulis 그것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 사싀 2.0a4μ—λŠ” μ—†λŠ” μ΄μƒν•œ 버그도 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄ ν…œν”Œλ¦Ώμ˜ λͺ¨λ“  ν…μŠ€νŠΈκ°€ μ‚¬λΌμ§‘λ‹ˆλ‹€.

iron-overlay-behavior#2.0.0 둜 폴리머 2λ₯Ό μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€.

λ‹€μŒμ€ 2.0.0-alpha4 μž…λ‹ˆλ‹€. http://www.giphy.com/gifs/3ohzdQKeVtoswDSpfW
λ‹€μŒμ€ iron-overlay-cancel μ§€μ μž…λ‹ˆλ‹€. http://www.giphy.com/gifs/3o7btZ3T0yMwKkG6fm

@arkihillel master μœ„μ— iron-overlay-cancel λ₯Ό λ‹€μ‹œ 기반으둜 ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 그리고 λͺ¨λ“  bower depλ₯Ό λ‹€μ‹œ μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ €μ—κ²Œ νš¨κ³Όκ°€ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.
μ‚¬μš©: vaadin-combo-box#iron-overlay-cancel, polymer#2.0.1, iron-overlay-behavior#2.0.0

Btw, 큰 λ¬Έμ œλŠ” μ•„λ‹ˆμ§€λ§Œ _removeOutsideTabListener , 즉 Tab λŒ€ Tap 으둜 μ˜€νƒ€λ₯Ό λƒˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€ ;)

@Saulis λŠ” μ§€κΈˆ μž‘λ™ν•©λ‹ˆλ‹€!
μˆ˜μ •ν•΄μ„œ μ£„μ†‘ν•©λ‹ˆλ‹€, μ΄μƒν•œ 버그λ₯Ό λ°œκ²¬ν•œ 쀄 μ•Œμ•˜λŠ”λ° 제 μ‹€μˆ˜μ˜€μŠ΅λ‹ˆλ‹€.

이미 μ•ˆμ •μ μΈ μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ?
마우슀λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•­λͺ©μ„ μ„ νƒν•˜λ©΄ 이벀트(selectedItemChange)κ°€ 두 번 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 첫 번째 ν•­λͺ©μ€ μƒˆλ‘œ μ„ νƒν•œ ν•­λͺ©μ΄κ³  두 번째 ν•­λͺ©μ€ 이전 ν•­λͺ©μž…λ‹ˆλ‹€(선택 사항 λ³€κ²½ λΆˆκ°€).
감사 ν•΄μš”.

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