Skip to content

Latest commit

Β 

History

History
113 lines (69 loc) Β· 6.12 KB

Module2.md

File metadata and controls

113 lines (69 loc) Β· 6.12 KB

λͺ¨λ“ˆ 2 : APEX μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ jQuery ν…ŒμŠ€νŠΈ

파트 1 - jQuery λ₯Ό μ΄μš©ν•œ 선택, 속성변경 ν…ŒμŠ€νŠΈ

jQueryλ₯Ό μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ elementsλ₯Ό μ„ νƒν•˜κ³ , DOM 트리λ₯Ό μ΄λ™ν•˜κ³ , ν•„μš”μ— 따라 DOM을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이번 λ‹¨κ³„μ—μ„œλŠ” λͺ‡ κ°€μ§€ jQuery μ‚¬μš©ν•œ ν…ŒμŠ€νŠΈλ₯Ό ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. APEX Workspace 에 λ‘œκ·ΈμΈν•œ λ’€ App Builder > Sample Database Application (이전 λͺ¨λ“ˆμ—μ„œ μ„€μΉ˜ν•œ)으둜 μ΄λ™ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ ν•΄λ‹Ή APEX μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ ν•œ λ’€ λ©”μΈνŽ˜μ΄μ§€λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  2. μ‚¬μš©μ€‘μΈ λΈŒλΌμš°μ €μ˜ κ°œλ°œμžλ„κ΅¬λ₯Ό μ˜€ν”ˆν•©λ‹ˆλ‹€. (Chrome의 경우 F12) 그리고 였λ₯΄μͺ½ μƒλ‹¨μ˜ Search Bar 의 elementsλ₯Ό μ°Ύμ•„λ΄…λ‹ˆλ‹€.

    κ°œλ°œμžλ„κ΅¬μ—μ„œ λ³Ό 수 μžˆλ“―μ΄ APEX의 Name이 νŽ˜μ΄μ§€κ°€ λžœλ”λ§ 될 λ•Œ ID둜 μ§€μ •λ©λ‹ˆλ‹€. 그리고 multiple elements (예. checkbox, radio group, shuttles, etc.)λ₯Ό μ‚¬μš©ν•œ 경우 Name 은 μƒμœ„ DOM에 λ§€ν•‘λ©λ‹ˆλ‹€.

    이제 λ‹€μŒμ˜ μ½”λ“œλ₯Ό console 에 μž…λ ₯을 ν•˜μ—¬ μ„œμΉ˜λ°”λ₯Ό μ‚¬μš©λΆˆκ°€λŠ₯ν•œ μƒνƒœλ‘œ λ³€κ²½ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

    $('#P1_SEARCH').attr('disabled', 'disabled');

    이제 λ‹€μ‹œ ν•΄λ‹Ή ν•­λͺ©μ„ μ›λž˜ μƒνƒœλ‘œ λ˜λŒλ¦¬κ² μŠ΅λ‹ˆλ‹€. λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

    $('#P1_SEARCH').removeAttr('disabled');
  3. μ‚¬μš©μ€‘μΈ λΈŒλΌμš°μ €μ˜ κ°œλ°œμžλ„κ΅¬μ—μ„œ Dashboard μ˜μ—­μ˜ IDλ₯Ό μ°Ύμ•„λ΄…λ‹ˆλ‹€.

    ν•΄λ‹Ή μ˜μ—­μ˜ IDλŠ” 랜덀으둜 μƒμ„±λ©λ‹ˆλ‹€. R2177368582615194411 와 같은 ν˜•νƒœμΈ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ ID듀은 보톡 λ°°ν¬μ‹œλ§ˆλ‹€ λ³€κ²½λ˜λ―€λ‘œ μš΄μ˜ν™˜κ²½ λ°°ν¬μ‹œμ—λ„ λ³€κ²½λ˜λ©°, λ”°λΌμ„œ Javascript μ½”λ“œμ— ν•΄λ‹Ή IDλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€.

    Page Designer μ—μ„œ 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν™ˆ νŽ˜μ΄μ§€μΈ page 1 둜 μ΄λ™ν•œ λ’€ μ™Όμͺ½μ— μœ„μΉ˜ν•œ λžœλ”λ§ μ°½μ—μ„œ Dashboard μ˜μ—­ μ„ νƒν•©λ‹ˆλ‹€. 그리고 였λ₯Έμ— μžˆλŠ” μ†μ„±μ°½μ—μ„œ Advanced μ„Ήμ…˜μ˜ Static ID λ₯Ό dashgoard-reg 둜 λ³€κ²½ν•©λ‹ˆλ‹€.

    λ‹€μ‹œ ν•΄λ‹Ή ν™”λ©΄μœΌλ‘œ λŒμ•„μ™€μ„œ λŒ€μ‹œλ³΄λ“œ μ˜μ—­μ˜ IDλ₯Ό ν™•μΈν•˜λ©΄ μƒˆλ‘œ μž…λ ₯ν•œ Static ID둜 λ˜μ–΄μžˆλŠ”κ²ƒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 이제 ν•΄λ‹Ήμ˜μ—­μ„ μ‚¬λΌμ§€κ²Œ ν•˜κ³  λ‹€μ‹œ λ‚˜νƒ€λ‚˜κ²Œ ν•˜λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

    $('#dashboard-reg').hide();

    λ‹€μŒμ€ λŒ€μ‹œλ³΄λ“œ μ˜μ—­μ„ λ‹€μ‹œ μ›λž˜ μƒνƒœλ‘œ λ³€κ²½ν•˜λŠ” μ½”λ“œ μž…λ‹ˆλ‹€.

    $('#dashboard-reg').show();

    hide 와 show λŒ€μ‹  각각 fadeOut 와 fadeIn λ₯Ό μ‚¬μš©ν•  수 도 μžˆμŠ΅λ‹ˆλ‹€.

  4. 개발자 도ꡬλ₯Ό μ‚¬μš©ν•΄μ„œ APEX μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 였λ₯Έμͺ½ 상단에 μžˆλŠ” λ„€μ΄κ²Œμ΄μ…˜ λ°”λ₯Ό κ²€μ‚¬ν•΄λ΄…λ‹ˆλ‹€.

    ν•΄λ‹Ή λ„€λΉ„κ²Œμ΄μ…˜λ°”λŠ” ul element 와 μ—¬λŸ¬κ°œμ˜ li elements 둜 이루어져 μžˆλŠ”κ²ƒμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€..

    ul 의 λ‘λ²ˆμ§Έ li 에 νŠΉμ • classλ₯Ό μΆ”κ°€ν•˜λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄λ³΄μ„Έμš”.

    $('.t-NavigationBar').children().eq(1).addClass('icon-only');

    그런 λ‹€μŒ, ν•΄λ‹Ή 리슀트λ₯Ό λ‹€μ‹œ μ›λž˜ μƒνƒœλ‘œ λ³€κ²½ν•˜λŠ” λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄λ³΄μ„Έμš”.

    $('.t-NavigationBar').children().eq(1).removeClass('icon-only');

파트 2 - jQuery λ₯Ό μ΄μš©ν•œ event ν…ŒμŠ€νŠΈ

이번 νŒŒνŠΈμ—μ„œλŠ” 기본적인 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μƒμ„±ν•œ λ‹€μŒ APEXμ—μ„œ 가끔 이벀트 μœ„μž„μ΄ ν•„μš”ν•œ 이유λ₯Ό μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. Sample Database Application 의 Products νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€. 그리고 λ‹€μŒμ— μ£Όμ–΄μ§„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄μ„œ μƒν’ˆλ¦¬μŠ€νŠΈ 이미지에 클릭 이벀트 ν•Έλ“€λŸ¬λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
$('img').on('click', function() {
  console.log('You clicked an image!');
});

이 μ½”λ“œλ₯Ό μˆ˜ν–‰ν•œ λ’€ μƒν’ˆ 이미지λ₯Ό ν΄λ¦­ν•΄λ΄…λ‹ˆλ‹€. 'You clicked an image!' λΌλŠ” λ©”μ‹œμ§€κ°€ μ½˜μ†”μ— 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

그런 λ‹€μŒ μƒν’ˆλ¦¬μŠ€νŠΈ 상단 μ„œμΉ˜λ°”μ˜ Goλ²„νŠΌμ„ ν΄λ¦­ν•˜κ³  λ‹€μ‹œ μƒν’ˆλ¦¬μŠ€νŠΈμ˜ 이미지λ₯Ό ν΄λ¦­ν•΄λ΄…λ‹ˆλ‹€. ν•΄λ‹Ή rowκ°€ μ΄λ²€νŠΈκ°€ 바인딩 λ˜μ§€ μ•ŠλŠ” μƒˆ elements 둜 λŒ€μ²΄λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 더 이상 μ½˜μ†”μ— λ©”μ‹œμ§€κ°€ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μŒ λ‹¨κ³„μ—μ„œλŠ” 이벀트 μœ„μž„μ„ 톡해 이런 문제λ₯Ό ν•΄κ²°ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄μ„œ μƒν’ˆλ¦¬μŠ€νŠΈμ— 이벀트 ν•Έλ“€λŸ¬λ₯Ό μΆ”κ°€ν•΄λ΄…λ‹ˆλ‹€. 이 이벀트 ν•Έλ“€λŸ¬λŠ” DOM νŠΈλ¦¬μƒ 훨씬 더 μ•„λž˜μ— μžˆλŠ” μ΄λ―Έμ§€μ—μ„œ 클릭 이벀트λ₯Ό μˆ˜μ‹ ν•©λ‹ˆλ‹€.

    $('#productsIRR').on('click', 'img', function() {
      console.log('You clicked an image!');
    });

    이 μ½”λ“œλ₯Ό μˆ˜ν–‰ν•œ λ’€ μƒν’ˆλ¦¬μŠ€νŠΈμ˜ 이미지λ₯Ό ν΄λ¦­ν•˜λ©΄ λ‹Ήμ—°νžˆ μ •μƒμ μœΌλ‘œ 클릭 μ΄λ²€νŠΈκ°€ μˆ˜ν–‰λ©λ‹ˆλ‹€. 그런 λ‹€μŒ λ‹€μ‹œ μ„œμΉ˜λ°”μ˜ Go λ²„νŠΌμ„ ν΄λ¦­ν•œ λ’€ μƒν’ˆλ¦¬μŠ€νŠΈμ˜ 이미지λ₯Ό ν΄λ¦­ν•΄λ΄…λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” κ³„μ†ν•΄μ„œ μ½˜μ†”μ°½μ— λ©”μ‹œμ§€κ°€ 좜λ ₯λ©λ‹ˆλ‹€.

  2. 이벀트 μœ„μž„, DOM μ‘°μž‘μ„ μ‚¬μš©ν•˜λŠ” μ’€ 더 μžμ„Έν•œ 예제λ₯Ό 보렀면 λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œ λ‹€μŒ μƒν’ˆλ¦¬μŠ€νŠΈμ˜ 이미지λ₯Ό ν΄λ¦­ν•΄λ³΄μ„Έμš”.

    $('#productsIRR').on('click', 'img', function() {
      $img = $(this);
    
      // Walk the DOM to get the product name
      productName = $img.parent('td').next('td').children('a').text();
    
      // Change the breadcrumb to include the product name of the image clicked
      $('.t-Breadcrumb-label').text('You clicked the ' + productName);
    });

    이 μ˜ˆμ œκ°€ DOMκ³Ό jQueryλ₯Ό μ„€λͺ…ν•˜λŠ” 졜고의 μ˜ˆμ œλŠ” μ•„λ‹ˆμ§€λ§Œ, DOMκ³Ό jQuery의 ν™œμš©μ΄ μ–Όλ§ˆλ‚˜ μœ μš©ν•œμ§€ μ•Œ 수 μžˆμ„κ²ƒ κ°™μŠ΅λ‹ˆλ‹€.

μ΄κ²ƒμœΌλ‘œ 이번 μ‹€μŠ΅μ„ μ™„λ£Œν–ˆμŠ΅λ‹ˆλ‹€. 이제 이벀트의 λ™μž‘ 방식과 APEXμ—μ„œ 이벀트 μœ„μž„μ„ μ‚¬μš©ν•  수 μžˆλŠ” 방법을 λ°°μ› μŠ΅λ‹ˆλ‹€.