Tag Clouds



당신은 Prototype에 대하여 얼마나 잘 알고 있나요?

PDF
실제로 우리가 Prototype에 대하여 얼마나 잘 알고 있는지 확인하는 시간을 가져봅시다. Juiry Zaytsev씨는 어떤 넌센스한 사람들은 document.getElementById와 Ajax.Request 메서드를 함께 사용하는 것도 목격했다고 하면서 안타까움을 토로하고 Prototype 1.6의 옳은 사용법과 바르지 못한 사용법을 비교하는 포스트(How well do you know prototype)를 작성했습니다.

How well do you know prototype

//바르지 못한 방법:
document.getElementById("foo ")
//적당한 방법: 놀랍게도 어떤 사람들은 이것에 대해 잘 모른다.
$("foo ")

//바르지 못한 방법:
var woot = document.getElementById("bar").value
var woot = $("bar").value
//적당한 방법: 폼 값의 편리하고 빠른 호출
var woot = $F("bar")

//바르지 못한 방법:
$('footer').style.height = '100px';
$('footer').style.background = '#ffc';	
//적당한 방법: 모든 브라우저가 W3C의 권고를 따르고 있지 않다.
$('footer').setStyle({
	height: '100px',
	background: '#ffc'
})

//바르지 못한 방법:
$('coolestWidgetEver').innerHTML = 'some nifty content'
//적당한 방법:
$('coolestWidgetEver').update('some nifty content')
// 아래와 같은 문법 구사가 가능해 지므로
$('coolestWidgetEver').update('some nifty content').addClassName('highlight').next().hide()

//바르지 못한 방법:
new Ajax.Request('ninja.php?weapon1=foo&weapon2=bar')
//적당한 방법: 보기 좋으며 보다 나은 파라메터 구조 사용 
new Ajax.Request('ninja.php', {
	parameters: {
		weapon1: 'foo',
		weapon2: 'bar'
	}
})

//바르지 못한 방법:
new Ajax.Request('blah.php', {
	method: 'POST',
	asynchronous: true,
	contentType: 'application/x-www-form-urlencoded',
	encoding: 'UTF-8',
})
//적당한 방법: 기본옵션은 생략하라!
new Ajax.Request('blah.php')

//바르지 못한 방법:
Event.observe('myContainer', 'click', doSomeMagic)
//적당한 방법: 논쟁의 여지가 있지만 객체지향적이다!
$('myContainer').observe('click', doSomeMagic)

//바르지 못한 방법:
$$('div.hidden').each(function(el){
	el.show();
})
//적당한 방법: 슬프게도 이 사용법을 아는 사람들이 많지 않다는 사실.
$$('div.hidden').invoke('show')

//바르지 못한 방법:
$$('div.collapsed').each(function(el){
	el.observe('click', expand);
})
//적당한 방법: invoke를 이용한 이벤트 핸들링, 졸라 쉽다!
$$('div.collapsed').invoke('observe', 'click', expand)

//바르지 못한 방법:
$$('input.date').invoke('observe', 'focus', onFocus);
$$('input.date').invoke('observe', 'blur', onBlur);
//적당한 방법: $$는 오버해드가 크기 때문에 invoke를 사용하면 $$를 여러번 사용할 필요도 없다.
$$('input.date').invoke('observe', 'focus', onFocus).invoke('observe', 'blur', onBlur)

//바르지 못한 방법:
$('productTable').innerHTML = 
	$('productTable').innerHTML + 
	'<tr><td>' + productId + ' '
	+ productName + '</td></tr><tr><td>' 
	+ productId + ' ' + productPrice + 
	'</td></tr>'
//적당한 방법: Template 클래스는 정말 쓸만한 DOM 솔루션이다. 하지만 잘 사용되고 있지 않는 것 같다.
var rowTemplate = new Template('<tr><td>#{id} #{name}</td></tr><tr><td>#{id} #{price}</td></tr>');
$('productTable').insert(
	rowTemplate.evaluate({
		id: productId,
		name: productName,
		price: productPrice
	}))
)

사실 저 또한 지금까지 몸에 배인 코드를 습관처럼 즐겨쓰기 때문에 새로운 방법에 익숙해지길 꺼려할 때가 있습니다. 하지만 invoke메서드나 Template메서드는 활용 가치가 매우 높다는 사실을 일깨워 주네요. 부록으로 How well do you know prototype Part 2도 참고하세요.


Comments

Trackback : http://firejune.com/trackback/1216

  1. avatar

    글 잘보고 갑니다 .^^;;

    Posted by 상두 at reply edit

     
     
  2. avatar

    감사합니다 ^^

    Posted by 파이어준 at edit

     
     
  3. avatar

    생각보다 많은걸 놓치고 있었네요 잘 보고 새겨들어야하겠습니다 :]

    Posted by azki at reply edit

     
     
  4. avatar

    그러게 말예요 ^^

    Posted by 파이어준 at edit

     
     
  5. avatar

    아직 공부중이라 개념이 잘 안잡힌 것들이 많은데 이건 도움이 많이 되겠네요.. 처음부터 습관을 잘 들여야 겠습니다.

    Posted by Outsider at reply edit

     
     
  6. avatar

    습관이 중요하죠 ^^

    Posted by 파이어준 at edit

     
     
  7. avatar

    new Ajax.Request('ninja.php?weapon1=foo&weapon2=bar') 같은 경우에는 파라메터를 GET방식으로 보내니까, 더 나은 방법에서 method: 'GET' 을 추가해줘야겠네요.

    invoke 두 번 연속으로 쓸 수 있는건 저도 생각 못 했었네요 ^^

    Posted by peecky at reply edit

     
     
  8. avatar

    아! 그렇죠.

    Posted by 파이어준 at edit

     
     
  9. avatar

    읽어보니 제가 놓치고 있던 부분이 많네요.
    트랙백이 안날아가서 수동트랙백 날려봅니다.
    http://widyou.net/250

    Posted by 위드 at reply edit

     
     
  10. avatar

    엇. 트랙백이 고장인가봅니다. 수정하도록 하겠습니다.

    Posted by 파이어준 at edit

     
     
  11. avatar

    Prototype 잘 아시나요? 움..
    실제로 우리가 Prototype에 대하여 얼마나 잘 알고 있는지 확인하는 시간을 가져봅시다. Juiry Zaytsev씨는 어떤 넌센스한 사람들은 document.getElementById와 Ajax.Request 메서드를 함께 사용하는..

    Tracked from  Junios World at

     
     
  12. avatar

    너무 좋은 글입니다. invoke란 메소드를 실제 어느경우에 쓰고 계신가요?

    Posted by k at reply edit

     
     
  13. avatar

    저는 지금까지 한번도 사용해 본적이 없습니다.;;

    Posted by 파이어준 at edit

     
     
  14. avatar

    정말 유용한 정보인것 같습니다 많이 배우고 갑니다 감사합니다

    Posted by ssamzie101 at reply edit

     
     
  15. avatar

    감사합니다.

    Posted by 파이어준 at edit

     
     
  16. avatar

    잘보고 갑니다. *^^*

    Posted by rulru at reply edit

     
     
  17. avatar

    감사합니다. *^^*

    Posted by 파이어준 at edit

     
     
  18. avatar

    켁.... prototype을 쓰고 있으면서도 document.getElementById라는 긴걸 쓰고 있었던 나는... ㅡㅡ;;;;;;
    잘보고 갑니다~~

    Posted by nn at reply edit

     
     
  19. avatar

    captcha