sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars4 | |
extra_vars5 | |
extra_vars6 |
Dojo 이벤트 다루기
이 절에서는 "Dojo 방식"으로 이벤트를 다루겠다. 이 장을 읽기 전에 참고자료의 Dojo event system을 읽어두면 좋을 것이다.
Listing 39는 Dojo 이벤트 시스템을 이용하여 Dojo 위젯의 이벤트를 다루는 방법이다. HTML 템플릿에서 dojoAttachEvent="eventName: eventHandlerMethod;"
속성을 정의해야 한다. eventName은 표준 DOM 이벤트 이름이다("onClidk" 같은). eventHandlerMethod
는 위젯의 자바스크립트 코드에 정의된 메서드로 이벤트 발생시 호출된다. 이 메서드는 Dojo 이벤트 객체를 받아들인다.
Listing 39는 dojoAttachEvent
속성이 HTML 템플릿에서 어떻게 이용되는지 보여준다.
Listing 39. dojoAjax/src/widget/template/HtmlHelloWorld.html
|
Listing 40 은 자바스크립트 코드에 onClickHandler()
이벤트 핸들러가 어떻게 정의되어 있는지 보여준다.
Listing 40. dojoAjax/src/widget/HelloWorld.js
|
Listing 41 은 Listing 39 와 40에서 정의한 위젯을 테스트하는 test.html 파일이다.
Listing 41. test.html: 이벤트 핸들링 테스트
|
Dojo 식으로 이벤트를 핸들링하는 것은 표준 DOM 이벤트를 사용하는 것(node.onclick = function(evt) { this.className='clicked';};
}; 같은)과는 조금 다르다. 한 예로 목표 노드를 this
키워드를 통해 접근할 수 없고 대신에 Dojo의 evt.currentTarget
속성을 사용해야 한다.
또 다른 예로는 이벤트 핸들러로부터 true/false를 얻고 싶다면 Dojo로부터 얻은 객체를 사용해야 함을 들 수 있다. evt.returnValue = true/false;
를 사용하라.
또 다른 흥미로운 점은 부모 DOM 노드의 이벤트가 넘쳐 자식에게 온 경우 이벤트를 멈출 수 있다는 것이다. dojo.event.browser.stopEvent(evt);
메서드를 사용하라.
게다가 Dojo는 세미콜론(;)을 이용하여 복수개의 이벤트 핸들러를 명시할 수 있다. 이를테면 다음과 같다. dojoAttachEvent="onClick: onClickHandler; onKeyPress: onKeyPressHandler;"
.
![]() |
![]()
|
어디든 자바스크립트로 이벤트 핸들러를 동적으로 붙일 수 있다. Listing 42에서는 postCreate
메서드에서 HelloWorld 위젯의 domNode
DOM 요소를 이벤트 핸들러로 붙이고 있다. 이 위젯을 테스트하려면 Listing 41의 test.html을 사용하라.
Listing 42. dojoAjax/src/widget/HelloWorld.js
|
![]() |
![]()
|
Dojo는 프레임워크가 아니라 툴킷이다. 그래서 필요할 때만 서브시스템으로 사용할 수 있다. 한 가지 예로 이벤트 핸들러를 오래된 DOM 형태의 자바스크립트 방식으로 this.domNode.onclick = function() {dojo.debug("Clicked");};
처럼 정의할 수 있다. 무엇을 하고 있는지만 확실히 알고 있다면 오래된 형태의 이벤트 핸들링에 문제가 없다.
어떤 경우 위젯 기반구조나 이벤트 핸들링 같은 Dojo 서브시스템을 확장된 형태로 사용하면 응용 프로그램의 메모리가 넘치거나 반응이 느려질 수도 있다. 한번에 시각적인 컴포넌트를 많이 불러들인 특이한 경우에 특히 그렇다. Dojo 서브시스템과 브라우저 가상 머신에 부담을 주지 않도록 하는 것이 좋다.
오래된 형태의 이벤트 핸들링 기법은 브라우저의 자바스크립트 가상 머신이 다루기 더 쉬울 수도 있다. Dojo 이벤트 핸들링 시스템을 사용하면 개발자의 삶이 더 편해진다. 개인적인 판단과 상식으로 이 둘 사이의 균형을 잡을 필요가 있다.
![]() |
![]()
|
HTML 템플릿에서 자바스크립트를 사용하면서 경험하는 가장 큰 문제는 HTML 템플릿의 개념적인 일관성이 깨진다는 것이다. 하지만 그것이 무얼 하는지 정확히 이해한다면 여전히 할만하다. 다음 예제를 보자.
|