ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [쇼핑몰 리팩토링] 09 JQuery 도입!!!
    카테고리 없음 2024. 3. 20. 10:30

    오직 JQuery라는 Javascript Framework 사용법을 익히기 위해서 의도적으로 진행한 리팩토링이다.

    (Framework는 언제나 양날의 검이다...javascript를 구체적으로 몰라도 쓸 수 있으니까.. 유념하자)

     

    JQuery API를 통해 쉽게 script구현이 가능하며, 그 방법은 아래와 같다.

     

    Step 1. $()를 통해 JQuery객체화 

    Step 2. JQuery객체에 API활용

     

    +

    JQuery를 통해 쉽게 element에 접근하고, API를 적용함으로써 다음과 같은 효과도 얻을 수 있다.

     

    예를 들어, HTML element의 attribute에, javascript function을 직접 달아주면 

    javascript와 html이 공존하므로 Coupling이 발생한다.

     

    ==> javascript단에서 HTML element에 접근해서 JQuery객체화, 원하는 기능을 처리

    이러한 '접근'은 javascript로도 할 수는 있지만, JQuery를 통해 훨씬 쉽게 Decoupling관계를 만들 수 있다.


    - JQuery접근법

    어쨌든 개발은 API싸움! JQuery의 수많은 API를 잘 사용하기 위해서

    API를 적용하고싶은 element에 '접근'하는 것이 핵심이다!

     

    JQuery는 CSS의 접근법을 활용한다.

     

    1. id로 접근

    $( "#stop-log" ).append( "<div>" + msg + "</div>" );

    id = "stop-log"인 element에 직접적으로 접근한다.

    가장 직관적이고 심플하지만, id는 유일해야하는 식별성이라는 점에서

    수많은 element마다 id로 접근하여 하나하나 제어하는 일은 많지 않을 것이다.

     


    2. element이름으로 접근

    td라는 element에 접근했는데

    여러 td 중 식별을 위해 background라는 attribute로 한번 걸러주고

    그것마저도 2개라서 array로 리턴된 JQuery객체에 인덱스로 접근했다. [0], [1]

    	<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
    	<script type="text/javascript">
    			
    		$(function(){
    			
    			$($('td[background="/images/ct_btnbg02.gif"]')[0]).click(function(){
    				alert("목록으로 돌아갑니다.");
    				$(document.location).attr("href","/product/listProduct?menu=manage");
    			});
    			
    			$($('td[background="/images/ct_btnbg02.gif"]')[1]).bind("click", function(){
    				alert("상품을 더 등록하시겠습니까?");
    				$(document.location).attr("href","/product/addProductView.jsp");
    			});
    			
    		});
    			
    	</script>

     

    인덱스로 접근한 것은 JQuery객체가 아닌, element이므로

    .click / .bind와 같은 JQuery API를 바로 적용할 수 없다.

    그래서 $()로 한번 더 묶어서 API를 적용했다.


    3. class attribute로 접근

     

    element들을 그룹짓기 위해 붙인 class attribute를 통해 접근한다.

    ct_btn01이라는 class가 붙은 모든 td에 접근한다.

    $(function(){
    	
    	$('td.ct_btn01:contains("수정")').bind("click", function(){
    		alert('수정하시겠습니까?');
    		fncUpdateProduct();
    	})
    	
    	$('td.ct_btn01:contains("취소")').bind("click", function(){
    		alert('상품정보 수정을 취소하시겠습니까?');
    		history.go(-1);
    	})
    	
    	
    });

     

     

    td.ct_btn01로 접근한 element들 중에서도 명확한 식별을 위해 : 노테이션으로 추가정보를 제공하였다.

    contains("수정")이라면, 접근한 element들 중에서 text로 "수정"을 갖고있는 것에 접근한다.

    <td background="/images/ct_btnbg02.gif" class="ct_btn01" style="padding-top: 3px;">
    					수정
    </td>   <!-- contains("수정")이라면 요기에 접근! -->
    
    <td background="/images/ct_btnbg02.gif" class="ct_btn01" style="padding-top: 3px;">
    					취소
    </td>

     

Designed by Tistory.