Dojo Dojo로 HTML 위젯 개발하기 - 내포 위젯

황제낙엽 2009.03.18 21:29 조회 수 : 21 추천:128

sitelink1  
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  
http://www.ibm.com/developerworks/kr/library/tutorial/wa-dojowidgets/section9.html

내포 위젯

이 절에서는 사용자 특화된 내포 위젯을 다루는 기법을 소개한다.

정적 내포 위젯

위젯 속에 위젯을 사용하는 경우가 있다. Dojo TabContainerTree 위젯은 좋은 예다.

Listing 30 은 내포 Button 위젯을 HelloWorld 위젯 안에 사용하는 경우다.


Listing 30. test.html: 정적 내포 위젯 예제
                    
·미리보기 | 소스복사·
  1. <html>  
  2. <head>  
  3. <script type="text/javascript"    
  4.       src="dojoAjax/dojo.js"></script>  
  5. <script type="text/javascript">  
  6.    dojo.require("dojo.widget.HelloWorld");    
  7.    dojo.require("dojo.widget.Button");   
  8. </script>  
  9. </head>  
  10. <body>  
  11.    <div dojoType="HelloWorld">  
  12.       <div dojoType="Button"></div>  
  13.    </div>  
  14. </body>  
  15. </html>  

이 가장 간단한 예제에서 isContainer 위젯 매개변수는 으로 정의하고 HTML 템플릿 안에 containerNode 결합점을 정의해야 한다. 그거면 끝이다. 내포 위젯은 자동으로 그려지고 containerNode에 추가된다.


Listing 31. dojoAjax/src/widget/HelloWorld.js
                    
·미리보기 | 소스복사·
  1. dojo.provide("dojo.widget.HelloWorld");   
  2. dojo.require("dojo.widget.HtmlWidget");    
  3.   
  4. dojo.widget.defineWidget("dojo.widget.HelloWorld", dojo.widget.HtmlWidget, {   
  5.    isContainer: true,   
  6.    templateString: '<div><div dojoAttachPoint="containerNode">'    
  7.       + '</div></div>'  
  8. });  

위 해법은 기본 Dojo 동작만 쓰기 때문에 단순하다. 원한다면 더 복잡하게 사용할 수 있지만 postCreate() 메서드에서 자식 배열(모든 정적 내포 위젯을 담을 표준 위젯 필드)를 처리해야 한다.

Listing 32에서 내포된 사용자 정의 위젯을 containerNode에 추가할 수 있을 뿐만 아니라 내포 위젯 타입 목록을 titleNode 결합점에 추가할 수도 있다.


Listing 32. dojoAjax/src/widget/HelloWorld.js
                    
·미리보기 | 소스복사·
  1. dojo.provide("dojo.widget.HelloWorld");   
  2. dojo.require("dojo.widget.HtmlWidget");    
  3.   
  4. dojo.widget.defineWidget("dojo.widget.HelloWorld", dojo.widget.HtmlWidget, {   
  5.    isContainer: true,   
  6.    templateString: '<div><div dojoAttachPoint="titleNode"></div>'    
  7.       + '<br/><div dojoAttachPoint="containerNode">'  
  8.       + '</div></div>',   
  9.   
  10.    postCreate: function() {   
  11.       for(var i in this.children) {   
  12.          this._addRow(this.children[i]);   
  13.       }   
  14.    },   
  15.   
  16.    _addRow: function(component) {   
  17.       this.titleNode.appendChild(   
  18.          document.createTextNode(component.widgetType));   
  19.       this.titleNode.appendChild(   
  20.          document.createElement("br"));   
  21.    }   
  22. });  

Listing 33Listing 32에 정의한 위젯이 동작하는 test.html이다.


Listing 33. test.html: 복수개의 정적 내포 위젯
                    
·미리보기 | 소스복사·
  1. <html>  
  2. <head>  
  3. <script type="text/javascript" src="dojoAjax/dojo.js"></script>  
  4. <script type="text/javascript">  
  5.    dojo.require("dojo.widget.HelloWorld");    
  6.    dojo.require("dojo.widget.Button");   
  7.    dojo.require("dojo.widget.ContentPane");   
  8. </script>  
  9. </head>  
  10. <body>  
  11.    <div dojoType="HelloWorld">  
  12.    <div dojoType="Button"></div>  
  13.    <div dojoType="ContentPane"></div>  
  14.    </div>  
  15. </body>  
  16. </html>  

내포 위젯을 다루는 더 유용한 예를 찾으려면 Dojo 툴킷의 TabContainerTree 위젯을 보라.




위로


내포 위젯을 동적으로 추가하기

사용자가 런타임에 Dojo 위젯을 위젯에 프로그래밍적으로 추가하고 싶다고 가정해 보자.

위젯 속성과 그들의 동적 변경자에 대해 이야기한 걸 기억하는가? 두 가지 사이의 일관성이 구조적으로 강제 사항이 아닌 것이 현재 Dojo 위젯 구조의 흠일지도 모른다. 물론 이 방법은 더 유연하게 하며 그다지 심각하지 않다. 하지만 그 속성에 대해 동적 변경자가 있는 것을 모른다면 성가신 일이 될 수도 있다. 개발자들이 그것을 추가하는 것을 잊기도 하기 때문에 위젯의 사용성을 상당히 떨어뜨린다.

내포 위젯에도 동일한 문제가 있다. 정적인 방법 대신에 다른 동적인 방법으로 추가해야 한다. 동적으로 추가하기 위해 addChild() 메서드를 사용할 필요가 있다. Listing 34는 정적, 동적으로 위젯을 추가한다. 재사용을 위해 _addRow() 메서드로 분리된 부분에 주의하라. addChild() 메서드를 재정의할 때 상위 클래스도 호출해야 한다.


Listing 34. dojoAjax/src/widget/HelloWorld.js
                    
·미리보기 | 소스복사·
  1. dojo.provide("dojo.widget.HelloWorld");   
  2. dojo.require("dojo.widget.HtmlWidget");    
  3. dojo.widget.defineWidget("dojo.widget.HelloWorld", dojo.widget.HtmlWidget, {   
  4.    isContainer: true,   
  5.    templateString: '<div><div dojoAttachPoint="titleNode"></div>'    
  6.       + '<br/><div dojoAttachPoint="containerNode">'  
  7.       + '</div></div>',   
  8.   
  9.    postCreate: function() {   
  10.       // adding statically   
  11.       for(var i in this.children) {   
  12.          this._addRow(this.children[i]);   
  13.       }   
  14.    },   
  15.    addChild: function(child, overrideContainerNode,    
  16.          pos, ref, insertIndex) {   
  17.       this._addRow(child);   
  18.       dojo.widget.HelloWorld.superclass.addChild.call(   
  19.          this, child, overrideContainerNode);    
  20.    },   
  21.    _addRow: function(component) {   
  22.       this.titleNode.appendChild(   
  23.          document.createTextNode(component.widgetType));   
  24.       this.titleNode.appendChild(   
  25.          document.createElement("br"));   
  26.    }   
  27. });  

Listing 35는 Button 위젯을 생성하고 동적으로 Listing 34의 위젯을 추가하는 것이다.


Listing 35. test.html: 내포 위젯을 동적으로 추가하기
                    
·미리보기 | 소스복사·
  1. <html>  
  2. <head>  
  3. <script type="text/javascript" src="dojoAjax/dojo.js"></script>  
  4. <script type="text/javascript">  
  5.    dojo.require("dojo.widget.HelloWorld");   
  6.    dojo.require("dojo.widget.Button");   
  7.   
  8.    dojo.addOnLoad(function(){   
  9.       var button = dojo.widget.createWidget("Button",    
  10.          {caption: "Submit"});   
  11.       dojo.widget.byId('someID').addChild(button);   
  12.    });   
  13.   
  14. </script>  
  15. </head>  
  16. <body>  
  17.    <div id="someID" dojoType="HelloWorld">  
  18.    </div>  
  19. </body>  
  20. </html>  

번호 제목 글쓴이 날짜 조회 수
34 스크랩 황제낙엽 2009.03.11 27
33 웹 개발 패러다임의 전환 - Flex와 Ajax의 동거 황제낙엽 2006.12.21 125
32 Ajax 강의 정리 황제낙엽 2006.04.04 73
31 자바 기술을 이용한 AJAX의 활용 황제낙엽 2006.02.08 15
30 대표적인 AJAX Framework 소개 file 황제낙엽 2007.02.14 100
29 Ajax Framework 인기 순위: Ajaxian.com 황제낙엽 2007.02.13 23
28 prototype.js 를 위한 개발자 노트 (Ajax Framework) file 황제낙엽 2007.02.15 15
27 Dojo 샘플 file 황제낙엽 2009.03.23 22
26 Dojo로 HTML 위젯 개발하기 - 참고자료 황제낙엽 2009.03.18 16
25 Dojo로 HTML 위젯 개발하기 - 정리 황제낙엽 2009.03.18 15
24 Dojo로 HTML 위젯 개발하기 - 개발과 디버깅: 기타 황제낙엽 2009.03.18 49
23 Dojo로 HTML 위젯 개발하기 - Dojo 이벤트 다루기 황제낙엽 2009.03.18 80
22 Dojo로 HTML 위젯 개발하기 - 복합 위젯 황제낙엽 2009.03.18 25
» Dojo로 HTML 위젯 개발하기 - 내포 위젯 황제낙엽 2009.03.18 21
20 Dojo로 HTML 위젯 개발하기 - 내포 HTML 황제낙엽 2009.03.18 40
19 Dojo로 HTML 위젯 개발하기 - 위젯에 프로그래밍에 따라 접근하기 황제낙엽 2009.03.18 43
18 Dojo로 HTML 위젯 개발하기 - 위젯 개발의 기초 황제낙엽 2009.03.18 18
17 Dojo로 HTML 위젯 개발하기 - 'Hello World' 위젯 황제낙엽 2009.03.18 62
16 Dojo로 HTML 위젯 개발하기 - Dojo HTML 위젯 황제낙엽 2009.03.18 363
15 Dojo로 HTML 위젯 개발하기 - 시작하기 황제낙엽 2009.03.18 20