블로그 이미지

카테고리

데꾸벅 (194)
Publisher (39)
Scripter (97)
Programmer (1)
Designer (30)
Integrator (18)
Pattern Searcher (4)
News (2)
강좌 및 번역 (3)

최근에 올라온 글

최근에 달린 댓글

Extjs 단축키 지정

Scripter/EXTJS / 2008. 2. 18. 19:21
기본적인 DOMQuery에 대해 알아봤으므로 쿼리해온 DOM에 단축키를 지정해 봅니다!

 

KeyMap이라는 클래스를 사용해서 각각의 요소에 단축키를 적용 할 수 있습니다.

1. 사용방법
Edit section

var map = new Ext.KeyMap('오브젝트아이디', {
      key : 13,   // 13은 Enter 키입니다....
      fn : handler,   // 이벤트가 적용되었을 때 실행될 함수
      scope : obj    // 여긴 적용될 객체 영역입니다.
});



위와 같은 형태로 객체를 생성하면  '아이디' 를 가지고 있는 element에서 Enter키(13번) 이 눌러지면 handler를 실행합니다..



2. key 이벤트 속성 지정하기
Edit section


위에서 사용 되었던 key 속성과 몇가지 키이벤트에 관련된 속성을 더 알아보겠습니다.

   
key : 적용되어질 키 문자열 입니다.
           ex),   특수키로 적용 할 경우    : [13, 10]      - Enter키와 Esc 키 둘 중 하나입니다.
                    문자로 적용 할 경우       :  "abc"        - a, b, c 키 중에 하나 입니다.
    ctrl  : control 키 적용 여부 입니다.
             true이면 control 키를 누른 상태이고 false이면 누르지 않은 상태입니다.
    alt  :  alter 키 적용 여부입니다. 사용은 ctrl과 같습니다.
    shift : shift 키 적용 여부입니다. 사용은 ctrl과 같습니다.




3. 여러개의 단축키 동시 지정
Edit section

var map = new Ext.KeyMap('아이디', []);
위와 같은 형태로 1에서 했던 이벤트 속성들을 배열로 넣어 줍니다.

var map = new Ext.KeyMap('아이디', [
    {
         key : 13,
         fn : function () { alert('Enter키를 눌렀습니다.'); },
         scope : this
     },
    {
         key : "abc",
         fn : function () { alert('a, b, c 중 하나의 키를 눌렀네요'); },
         scope : this
     },
    {
         key : "a",
         shift : true,
         alt : true,
         fn : function () {  alert('shift + alt + a 키를 동시에 누르셨습니다. '); } ,
         scope : this
    }
]);



이와 같이 배열 형태로 이벤트를 여러개를 지정하면 '아이디' 객체에 저런 이벤트가 발생할 때마다 함수들을 실행하게 될 것입니다.

'Scripter > EXTJS' 카테고리의 다른 글

Extjs Qtips 사용하기  (0) 2008.02.18
Extjs Template 사용하기  (0) 2008.02.18
Extjs 기본 DomQuery  (0) 2008.02.18
Extjs 초보자를 위한 애플리케이션 레이아웃(2.02)  (8) 2008.02.17
Extjs scope에 대한 고찰  (2) 2008.02.17
Post by 넥스트리소프트 데꾸벅(techbug)
, |

Extjs 기본 DomQuery

Scripter/EXTJS / 2008. 2. 18. 19:18

extjs.com에 번역했던 글을 다시 올린다.
번역을 션찮게 해서 늘 맘에 걸려 언제 다시 가다듬어야 할텐데
원문사이트 : http://extjs.com/learn/Tutorial:DomQuery_v1.1_Basics


DomQuery 기본

DomQuery의 select 함수는 2개의 파라미터값을 갖는다. 첫번째는 선택자의 문자열이고 두번째는 만들어질 요소(query)의 id값이다. 현 튜토리얼에서는 Ext.DomQuery.select()를 Ext.query()메쏘드 축약명으로 사용할것이다.


사용하게될 html:

<html>
<head>
<script type="text/javascript" src="../js/firebug/firebug.js"></script>
</head>
<body>
<script type="text/javascript" src="../ext/ext-base.js"></script>
<script type="text/javascript" src="../ext/ext-core.js"></script>
<div id="bar" class="foo">
I'm a div ==> my id: bar, my class: foo
<span class="bar">I'm a span within the div with a foo class</span>
<a href="http://www.extjs.com" target="_blank">An ExtJs link</a>
</div>
<div id="foo" class="bar">
my id: foo, my class: bar
<p>I'm a P tag within the foo div</p>
<span class="bar">I'm a span within the div with a bar class</span>
<a href="#">An internal link</a>
</div>
</body>
</html>

Part 1: Element selectors

문서안에 모든 span 태그를 가져온다고 가정하자

// 이 쿼리는 문서내의 전체 spane태그를 체크하여 2개의 엘리먼트 배열값을 리턴한다.
Ext.query("span"); // [span.bar, span.bar]
// 이 쿼리는 foo라는 id값을 가진 span태그의 배열값을 리턴한다.
Ext.query("span", "foo"); // [span.bar]

첫번째 파라미터로서 일반적인 문자열값이 어떻게 사용되는지 주목하자

아이디(id) 값으로 가져오기 위해서는 "#"을 붙인다.:

// foo값을 아이디값으로 하는 div 배열값을 리턴한다.
Ext.query("#foo"); // [div#foo.bar]

클래스로 가져오기 위해서는 "."을 붙인다.:

/* 두번째 div 를 반환한다. */
Ext.query(".foo"); // [div#bar.foo]

모든 요소값을 가져오기 위해서는 "*"를 사용해도 된다:

// 현재 문서의 모든 엘리먼트들을 리턴한다..
Ext.query("*"); //
//[html, head, script firebug.js, link,
//body#ext-gen2.ext-gecko, script ext-base.js, script ext-core.js,
//div#bar.foo, span.bar, a www.extjs.com, div#foo.bar, p, span.bar,
//a test.html#]

자식 태그를 가져오기 위해서는 2개의 선택자 사이에 공백을 삽입하면 된다:

// div태그안에 p태크를 가진 엘리먼트를 리턴한다.
Ext.query("div p"); // [p]
// div태그안의 span태그를 가진 2개의 엘리먼트 배열값을 리턴한다.
Ext.query("div span"); // [span.bar, span.bar]


3개 이상의 엘리먼트 선택자를 가진것들은 다음 매뉴얼을 참고하기 바란다. DomQuery docs  :)

Part 2: Attributes selectors

엘리먼트요소의 속성값으로 해당 객체를 가져오는 방법은 아래 같다. 속성은 HTML요소에서 href, id또는 class와 같은 것이다.


// class속성을 가지는 어떤 엘리먼트가 있는지 체크하자.
// 이 쿼리는 5개의 엘리먼트 배열을 리턴한다..
Ext.query("*[class]"); // [body#ext-gen2.ext-gecko, div#bar.foo, span.bar,
//div#foo.bar, span.bar]

특정 클래스 속성을 가진것들을 검색해 보자.

// 클래스값이 "bar"와 같은 엘리먼트를 리턴한다.
Ext.query("*[class=bar]"); // [span.bar, div#foo.bar, span.bar]
 
// 클래스값이 "bar"와 같지 않은 모든 엘리먼트를 리턴한다.
Ext.query("*[class!=bar]"); // [html, head, script firebug.js, link,
//body#ext-gen2.ext-gecko, script ext-base.js, script ext-core.js,
//div#bar.foo, a www.extjs.com, p, a test.html#]

 
// 클래스값이 "b"로 시작되는 엘리먼트를 리턴한다.
Ext.query("*[class^=b]"); // [span.bar, div#foo.bar, span.bar]
 
// 클래스 값이 "r"로 끝나는 엘리먼트를 리턴한다.
Ext.query("*[class$=r]"); // [span.bar, div#foo.bar, span.bar]
 
// this will give all elements that has a class with the "a" substring
Ext.query("*[class*=a]"); // [span.bar, div#foo.bar, span.bar]

Part 3: CSS Value selectors

이 선택자는 DOM 엘리먼트의 style속성과 같이 사용된다.

Let's add some color into that html:

<html>
<head>
<script type="text/javascript" src="../js/firebug/firebug.js"></script>
</head>
<body>
<script type="text/javascript" src="../ext/ext-base.js"></script>
<script type="text/javascript" src="../ext/ext-core.js"></script>
<div id="bar" class="foo" style="color:red;">
I'm a div ==> my id: bar, my class: foo
<span class="bar">I'
m a span within the div with a foo class</span>
<a href="http://www.extjs.com" target="_blank" style="color:yellow;">
An ExtJs link with a blank target!</a>
</div>
<div id="foo" class="bar" style="color:fushia;">
my id: foo, my class: bar
<p>I'm a P tag within the foo div</p>
<span class="bar">I'
m a span within the div with a bar class</span>
<a href="#" style="color:green;">An internal link</a>
</div>
</body>
</html>

칼라를 만드는 CSS값을 쿼리해볼것이다. 이것이 전부가 아니다. 구조는 다음과 같다:

element{attribute operator value}


// get all red text element
Ext.query("*{color=red}"); // [div#bar.foo]
 
// get all pink colored element that is a child of a red colored element
Ext.query("*{color=red} *{color=pink}"); // [span.bar]
 
// get everything except for the red text element
Ext.query("*{color!=red}"); // [html, head, script firebug.js, link,
//body#ext-gen2.ext-gecko, script ext-base.js, script ext-core.js, span.bar,
//a www.extjs.com, div#foo.bar, p, span.bar, a test.html#]

 
// get all element that has a color property starting with "yel"
Ext.query("*{color^=yel}"); // [a www.extjs.com]
 
// get all element that has a color property ending with "ow"
Ext.query("*{color$=ow}"); // [a www.extjs.com]
 
// get all element that has the "ow" substring
Ext.query("*{color*=ow}"); // [a www.extjs.com, span.bar]

Part 4: 가상클래스 선택자

We are now going to fetch nodes using this improved web page based on what I did earlier. I merely added some styling in there plus an UL element, a TABLE element and a FORM element to make use of every pseudo classes selectors.

<html>
<head>
<script type="text/javascript" src="../js/firebug/firebug.js"></script>
</head>
<body>
<script type="text/javascript" src="../ext/ext-base.js"></script>
<script type="text/javascript" src="../ext/ext-core.js"></script>
<div id="bar" class="foo" style="color:red; border: 2px dotted red;
margin:5px; padding:5px;"
>
I'm a div ==> my id: bar, my class: foo
<span class="bar">I'
m a span within the div with a foo class</span>
<a href="http://www.extjs.com" target="_blank" style="color:yellow;">
An ExtJs link with a blank target!</a>
</div>
<div id="foo" class="bar" style="color:fushia; border: 2px dotted black;
margin:5px; padding:5px;"
>
my id: foo, my class: bar
<p>I'm a P tag within the foo div</p>
<span class="bar">I'
m a span within the div with a bar class</span>
<a href="#" style="color:green;">An internal link</a>
</div>
<div style="border:2px dotted pink; margin:5px; padding:5px;">
<ul>
<li>Some choice #1</li>
<li>Some choice #2</li>
<li>Some choice #3</li>
<li>Some choice #4 with a <a href="#">link</a></li>
</ul>
<table style="border:1px dotted black;">
<tr style="color:pink">
<td>1st row, 1st column</td>
<td>1st row, 2nd column</td>
</tr>
<tr style="color:brown">
<td colspan="2">2nd row, colspanned! </td>
</tr>
<tr>
<td>3rd row, 1st column</td>
<td>3rd row, 2nd column</td>
</tr>
</table>
</div>
<div style="border:2px dotted red; margin:5px; padding:5px;">
<form>
<input id="chked" type="checkbox" checked/><label for="chked">I'm checked
</label>
<br /><br />
<input id="notChked" type="checkbox" /><label for="notChked">not me brotha!
</label>
</form>
</div>
</body>
</html>

off we go:

//span태그의 첫번째 자식노드를 가져온다.
Ext.query("span:first-child"); // [span.bar]
 
//A태그의 마지막 자식노드를 가져온다.
Ext.query("a:last-child") // [a www.extjs.com, a test.html#]
 
//Span태그의 두번째 자식노드를 가져온다.
Ext.query("span:nth-child(2)") // [span.bar]
 
//홀수번째 TR를 가져온다. (아주 유용한듯 ^^)
Ext.query("tr:nth-child(odd)") // [tr, tr]
 
//짝수번째 LI 를 가져온다.
Ext.query("li:nth-child(even)") // [li, li]
 
//자식노드를 가진 A태크만 가져온다.
 
Ext.query("a:only-child") // [a test.html#]
 
//체크된 INPUT 태그만 가져온다.
Ext.query("input:checked") // [input#chked on]
 
//첫번째 TR
Ext.query("tr:first") // [tr]
 
//마지막 INPUT
Ext.query("input:last") // [input#notChked on]
 
//2번째 TD
Ext.query("td:nth(2)") // [td]
 
 
// within이라는 문자열을 포함한 div태크
Ext.query("div:contains(within)") // [div#bar.foo, div#foo.bar]
 
//자식노드로 form을 포함하지 않은 div태크
Ext.query("div:not(form)") [div#bar.foo, div#foo.bar, div]
 
//A태그를 가진 div태크
Ext.query("div:has(a)") // [div#bar.foo, div#foo.bar, div]
 
//다음 TD값을 가져온다.(colspan은 무시)
Ext.query("td:next(td)") // [td, td]
 
//INPUT의 선행되는 label요소를 가져온다.
Ext.query("label:prev(input)") //[label, label]

결론

본튜토리얼은 API문서를 이용하여 만들어졌다. 단순히 실제 웹페이지에 근거한 결과를 보여주길 원했다.

DomQuery문서를 읽어보셨던 분들은 이 장을 건너띄고 다음 DomQuery advanced tutorial 를 읽어보시기 바란다.!

참고적으로 영어가 미천한 관계로 태글은 정중히 사양한다.


'Scripter > EXTJS' 카테고리의 다른 글

Extjs Template 사용하기  (0) 2008.02.18
Extjs 단축키 지정  (0) 2008.02.18
Extjs 초보자를 위한 애플리케이션 레이아웃(2.02)  (8) 2008.02.17
Extjs scope에 대한 고찰  (2) 2008.02.17
ExtJS Tutorial  (1) 2008.02.17
Post by 넥스트리소프트 데꾸벅(techbug)
, |
시작하기전에

본 튜토리얼은 여러분이 이미 ExtjS(자바스크립트 라이브러리)를 설치 했다고 가정합니다. 우리가 만들 어플리케이션 디렉터리의 하위에 extjs 라는 이름의 디렉터리에 설치되어 있어야 합니다. 만약 Ext JS를 이미 다른 곳에 설치했다면 예제 파일내의 스크립트 태그 속성인 src 속성값을 알맞은 경로로 수정합니다.

우리에게 필요한 것

ExtJS외에 2개의 파일이 더 필요합니다:

  • applayout.html
  • applayout.js


이제 최소한의 내용과 파일만으로 진행해봅시다. 여기에 상세한 설명이 있습니다:

applayout.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="../extjs/resources/css/ext-all.css">
    <script type="text/javascript" src="../extjs/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="../extjs/ext-all-debug.js"></script>
    <script type="text/javascript" src="applayout.js"></script>
    <!-- 현지화 스크립트 파일은 여기에 위치시킵니다. -->
    <script type="text/javascript">
        Ext.onReady(myNameSpace.app.init, myNameSpace.app);
    </script>
    <title>Application Layout Tutorial</title>
</head>
<body>
</body>
</html>


첫 번째 두 줄은 문서 타입을 지정하고 있습니다. 어플리케이션은 문서타입을 지정하지 않아도 실행될 수 있지만 이 경우 브라우저는 작성된 어플리케이션에게 브라우저간 호환성을 제공하기 위해 기능이 떨어지는 하위호환 모드로 작동될 것입니다.

본 튜토리얼에서는 전통적인 HTML 4.01을 사용합니다. 왜냐하면 이 문서 타입은 대부분의 메이저 브라우저들이 아주 잘 지원하기 때문입니다. 물론 여러분의 기분이나 필요에 따라 다른 문서 타입을 사용 할 수도 있습니다. 하지만 반드시 항상 문서 타입을 지정해야 한다 라는 사실을 기억해두세요.

html과 head를 지나면 Content-Type을 지정하는 부분이 나옵니다. 아까와 마찬가지로 이 부분이 없어도 어플리케이션은 실행 됩니다만 여기에 있어야 합니다.

이제 우리는 Ext 스타일과 어댑터 그리고 ExtJS 자체를 인클루드 합니다. 여기에 두 가지 버전의 ExtJS가 있습니다:

  • ext-all.js - 사람이 읽기 어렵고, 로딩이 빠르며, 출시용
  • ext-all-debug.js - 사람이 읽기 쉽고, 개발용

우리는 개발을 해야 하니까 디버그 버전을 인클루드 합니다.

계속 내려가면 우리의 어플리케이션인 applayout.js 이 나옵니다. 그 다음에는 어플리케이션이 초기화가 되기 전에 applayout.js와 ExtJS내의 모든 영어 문자를 변환 시켜주는 현지화 스크립트가 나옵니다.

이제 우리는 문서가 모두 로드 되고 나서 초기화(실행) 할 수 있는 이벤트 핸들러를 설치 할 준비가 되었습니다.

Line

Ext.onReady(myNameSpace.app.init, myNameSpace.app);

읽기 : 문서가 모두 로드 되고 나면 myNameSpace.app 스코프(scope) 내에서 myNameSpace.app의 init 메소드를 실행시켜라.

계속해서 타이틀, head의 끝과 body(지금은 비어 있음) 그리고 닫는 태그가 나옵니다.

여기까지가 우리의 가장 작은 html 파일의 전부 입니다.

applayout.js

/**
  * Application Layout
  * by Jozef Sakalos, aka Saki
  * http://extjs.com/learn/Tutorial:Application_Layout_for_Beginners
  */
 
// reference local blank image
Ext.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif';
 
// create namespace
Ext.namespace('myNameSpace');
 
// create application
myNameSpace.app = function() {
    // do NOT access DOM from here; elements don't exist yet
 
    // private variables
 
    // private functions
 
    // public space
    return {
        // public properties, e.g. strings to translate
 
        // public methods
        init: function() {
            alert('Application successfully initialized');
        }
    };
}(); // end of app
 
// end of file

이 파일의 첫 번째 줄은 주석인데 파일의 내용, 저자와 관련 정보를 설명합니다. 뭐, 어플리케이션은 이 한 줄의 주석이 없어도 실행이 됩니다만 다음을 기억해 두세요: 항상 다른 사람을 위해 작성하듯이 당신의 어플리케이션을 작성해라. 몇 달이 지나서 자신의 코드를 다시 보면 이전 규칙에 대한 기억이 나지 않을 것이고 여러분은 자신의 코딩 습관을 바꾸게 될 겁니다.

그리고 공백 이미지의 기본 참조 값이 extjs.com쪽으로 지정된 것을 여러분의 서버 쪽으로 변경합니다. 각각 어플리케이션이 로드 될 때마다 extjs.com에 접근하는 것을 원치 않으시겠죠?

이제 우리들만의 네임스페이스를 만들어 봅시다. 이렇게 하는 이유는 하나의 전역 객체 안에 모든 변수와 메소드를 담아서 변수 명 충돌을 피하고 여러 전역 함수들에 의해 변수가 예측할 수 없는 값으로 변경되는 것을 막기 위해서입니다. 이름은 여러분이 적당히 선정하면 됩니다.

이게 핵심인데, 마지막으로 우리는 리턴 값으로 즉시 실행되는 함수를 제공하는 myNameSpaceapp 프로퍼티를 만들었습니다.


만약 아래의 코드를 실행 시키면

var o = function() {
    return {p1:11, p2:22};
}();

파싱 후에 즉시 실행될 수 있는 익명 함수(이름이 없는 함수)를 만든 겁니다.(함수 선언 뒤에 ()가 붙는 것에 주의 하세요). 이 함수는 객체를 리턴 하며 변수 o에 할당 되어 있습니다. 우리의 어플리케이션은 같은 로직을 사용합니다.

초기화나 private 변수 혹은 함수 선언구문을 함수의 시작부터 return 구문 사이에 넣을 수 있습니다. 하지만 다음을 기억하세요:이 코드는 head의 일부분으로 실행이 되고 이때는 html 엘리먼트들이 준비 안되어 있으므로 접근을 시도하려고 하면 에러가 발생됩니다.

이와는 반대로, init 함수는 단지 익명함수에 의해서 리턴 되는 하나의 메소드 인데 문서가 모두 로드 되었을 때 실행이 되며 모든 DOM 구조를 사용할 수 있습니다.

여기까지 잘 따라오셨습니다. 만약 실수를 하지 않았다면 http://여러분서버.com/applayout/applayout.html에 접근 했을 때 경고 창이 보일 겁니다(다른 말로 표현하면 어플리케이션을 실행시켰을 때).

이제 가장 어려운 부분입니다:이 비어 있는 템플릿 안에 먼가 쓸만한걸 집어 넣기.

Public, Private, Privileged?

우리의 어플리케이션에 생명을 불어 넣어 봅시다. 아래 부분을 applayout.html 파일 내의 body 태그에 추가 시킵니다:

<div id="btn1-ct"></div>

이것은 비어 있는 div 인데 버튼의 컨테이너로 이용 될 겁니다. 그리고 아래의 몇 줄을 applayout.js 파일에 추가 시킵니다:

/**
  * Application Layout
  * by Jozef Sakalos, aka Saki
  * http://extjs.com/learn/Tutorial:Application_Layout_for_Beginners
  */
 
// reference local blank image
Ext.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif';
 
// create namespace
Ext.namespace('myNameSpace');
 
// Just to allow this tutorial to work for 1.1 and 2.
Ext.Ext2 = (Ext.version && (Ext.version.indexOf("2") == 0));
 
// create application
myNameSpace.app = function() {
    // do NOT access DOM from here; elements don't exist yet
 
    // private variables
    var btn1;
    var privVar1 = 11;
 
    // private functions
    var btn1Handler = function(button, event) {
        alert('privVar1=' + privVar1);
        alert('this.btn1Text=' + this.btn1Text);
    };
 
    // public space
    return {
        // public properties, e.g. strings to translate
        btn1Text: 'Button 1',
 
        // public methods
        init: function() {
            if (Ext.version == "2.0") {
                btn1 = new Ext.Button({
                    renderTo: 'btn1-ct',
                    text: this.btn1Text,
                    handler: btn1Handler
                });
            } else {
                btn1 = new Ext.Button('btn1-ct', {
                    text: this.btn1Text,
                    handler: btn1Handler
                });
            }
        }
    };
}(); // end of app
 
// end of file

변수인 btn1privVar1private 인데, 이것이 뜻하는 바는 이들은 어플리케이션의 밖에서는 접근이 안되고 절대 보이지 않는다는 겁니다. priavate 함수인 btn1Handler 도 역시 마찬가지 입니다.

정반대로 btn1Text는 public 변수이며 어플리케이션의 밖에서 보이고 접근이 가능합니다.(잠시 후 시연을 할겁니다.)

함수 initprivileged 이며 이것은 private 와 public 양쪽의 변수 혹은 함수에 접근이 가능합니다. 우리의 예제에서 public 변수인 this.btn1Text 와 private 함수인 btn1Handler 에 접근이 가능합니다. 함수 initpublic 이기도 하며 외부에서 호출 될 수 있습니다.

자 이제 실행시켜 봅시다! 좌측 상단 코너에 버튼이 보이나요? 좋습니다. 클릭해봅시다. privVar1=11 이 적혀 있는 경고 창이 보일 겁니다. 그렇죠? private 함수는 private 변수에 접근 할 수 있습니다.

하지만 두 번째 경고 창은 뭔가가 잘못되어 this.btn1Text=undefined 라고 보일 건데, 이건 우리가 기대하던 게 아니죠. 그 이유는 변수 this가 우리의 어플리케이션이 아니라 버튼의 핸들러 내부를 지정하고 있기 때문입니다. 아래 보이는 것처럼 버튼 설정부분에 scope:this 를 추가합니다:

if (Ext.Ext2) { //Ext.version.indexOf("2.0") == 0 와 같음.
    btn1 = new Ext.Button({
        renderTo: 'btn1-ct',
        text: this.btn1Text,
        handler: btn1Handler,
        scope:this
    });
} else {
    btn1 = new Ext.Button('btn1-ct', {
        text: this.btn1Text,
        handler: btn1Handler,
        scope:this
    });
}


그리고 페이지를 새로 고칩니다. 잘 작동되지요?

public 변수 오버라이드(override)하기

아래의 코드를 applayout.js 의 마지막 부분에 추가 시킵니다:

Ext.apply(myNameSpace.app, {
    btn1Text:'Taste 1'
});
 
// end of file

이 코드들은 무엇을 할까요? 처음으로 우리의 어플리케이션 객체를 생성하고 public 변수인 btn1text의 값을 오버라이드 합니다. 실행시키면 버튼의 글자가 변경되는 것을 볼 수 있습니다.

원본 어플리케이션 코드를 건드리지 않고도 쉽게 다른 언어로 변역 하는 것처럼 이것은 어플리케이션 내의 public 변수에 값을 입력하는 좋은 코딩 습관입니다.

물론 치수나 스타일 등등 모든 설정 가능한 옵션의 설정 값을 변경 할 수 있습니다. 여러분은 어딘가의 색상을 변경하기 위해 수천 라인의 코드를 뒤져 보는 것을 원치 않을 겁니다.

public 함수 오버라이드 하기

아래 보이는 것처럼 우리의 코드를 변경해봅시다:

Ext.apply(myNameSpace.app, {
    btn1Text:'Taste 1',
    init: function() {
        try {
            btn1 = new Ext.Button('btn1-ct', {
                text: this.btn1Text,
                handler: btn1Handler,
                scope: this
            });
        }
        catch(e) {
            alert('Error: "' + e.message + '" at line: ' + e.lineNumber);
        }
    }
});
 
// end of file

우리가 여기서 무엇을 하고 있는 중 일가요? 단지 이전에 있던 동일한 코드에 에러를 처리하기 위한 try/catch 블록만 추가 시켜서 init 함수를 오버라이드 하는 중 입니다. 수정 이전과 동일한 실행 결과를 보일 것으로 기대 되지만 혹시 다를 수도 있을 까요? 실행시켜서 직접 확인해 봅시다.

이런! btn1Handler이 선언되어 있지 않아 에러 상태가 됩니다. 이유는 수정된 함수가 private 변수에 접근 하려고 했기 때문입니다. 이렇게는 실행될 수 가 없습니다. 하지만 아까 보았죠? 원본 initprivileged 라서 private 공간에 접근 할 수 있다는 걸, 하지만 새로운 init는 그렇게 할 수 가 없는데 여기서 안전성에 대한 관점을 다시 볼 수 있습니다:외부의 코드는 private 공간에 접근 할 수 없다. 오버라이드된 privileged들 까지도

계속 진행 중...

제가 생각 중인 유용한 튜토리얼의 일부로 처음 부분을 이렇게 릴리스 하였으며 그 외에도 다른 예제에 대한 계획 중 입니다.

'Scripter > EXTJS' 카테고리의 다른 글

Extjs 단축키 지정  (0) 2008.02.18
Extjs 기본 DomQuery  (0) 2008.02.18
Extjs scope에 대한 고찰  (2) 2008.02.17
ExtJS Tutorial  (1) 2008.02.17
ExtJS 시작하기  (8) 2008.02.17
Post by 넥스트리소프트 데꾸벅(techbug)
, |

시작하기 전에
Edit section

이 튜토리얼을 공부하기 위한 가장 좋은 방법은 파이어폭스파이어버그를 바로 곁에 두는 것입니다. 이 방법으로 본 튜토리얼내의 예제를 즉시 테스트 해볼 수 있습니다.

만약 아직 가지고 있지 않다면 두 가지 모두 설치 하세요.

정의
Edit section

scope
1. (명사) 어떤 활동 혹은 작업 또는 힘을 가지거나 제어를 할 수 있는 지역 [1]
2. (명사) 프로그램 내에서 변수의 접근 범위; 예를 들어 어떤 함수가 다른 함수에서 생성된 변수를 사용할 수 있는지 여부. [2]

함수 실행 시 어디에 있는 변수에 접근이 가능 한지 찾는 중에 누군가가 "이건 스코프 문제야" 혹은 "이건 잘못된 스코프에서 실행 중이야" 라고 하거나 그와 비슷하게 이야기를 하면 우리는 어떻게 이것을 처리해야 할까요?

이제 가봅시다
Edit section

사실 자바스크립트 내에서 선언된 함수들은 객체에 소속된 메소드들 입니다. 아래와 같이 코드를 작성하더라도 말이죠:

function fn() {
    alert(11);
}

제가 농담을 하고 있다고 말하시겠죠. 하지만 이게 진짜 진실인지 아주 쉽고 간단하게 증명 해낼 수 있습니다. 이 예제를 위해서 어떠한 자바스크립트 파일이나 서버, 혹은 html이 필요치 않습니다. 단지 파이어폭스를 열고 파이어버그의 하단 윈도우를 열어서 콘솔 탭을 클릭하고 브라우저의 status 바 바로 위에 >>> 입력란에 코드를 입력하면 됩니다.

아래와 같이 입력하고:

function fn() { alert(11); };

엔터를 입력하면 아무 반응이 없습니다. 그렇죠? fn 함수만 선언 한 것이지요. 다음과 같이 입력합니다:

fn();

엔터를 입력하면 11이 적힌 경고 창을 볼 수 있습니다. 여기까지 잘 따라 오셨습니다. 다시 입력해봅시다:

window.fn();
this.fn();

같은 결과가 보이나요? 함수 fn은 window 객체의 메서드가 된 것을 알 수 있고 두 번째 라인은 this 변수가 window 객체를 가리키고 있다는 사실을 증명합니다. 이런고로 자신의 함수를 window.myFunction(...)처럼 호출할 필요가 없다는 것이죠. 이것은 편리하기도 하고 게으른 프로그래머들의 일을 덜어줍니다.

window 객체
Edit section

window 객체는 항상 존재하며 브라우저 윈도우 그 자체 라고 생각 하시면 됩니다. 이것은 document 객체와 전역(global)으로 선언된 모든 변수와 같은 다양한 객체를 담고 있습니다.

다시 파이어버그를 열어서 Script 탭으로 변경 시키고 우측에 "New watch expression..." 라고 적혀 있는 박스에 window 라고 입력 합니다. 그러면 window 객체에 어떤 것들이 있는지 살펴 볼 수 있습니다.

특히 방금 전 선언했던 fn 함수를 찾아 보시기 바랍니다.

각각의 frame 혹은 iframe은 자신만의 고유한 영역에서 독립적인 window 객체를 가지고 있습니다.

스코프(scope) 이해하기
Edit section

이제 조금 더 어려운걸 해봅시다. 다시 파이어버그의 Console 탭을 선택하고 다음과 같이 입력합니다:

var o1 = {testvar:22, fun:function() { alert('o1: ' + this.testvar); }};
var o2 = {testvar:33, fun:function() { alert('o2: ' + this.testvar); }};

우리가 무엇을 한 것일까요? 객체 o1o2 를 선언했고 이 둘은 같은 이름의 프로퍼티와 메서드를 가지고 있지만 각각의 프로퍼티는 다른 값을 가지고 있습니다.

아래와 같이 입력합니다:

fun();
window.fun();
this.fun();

에러가 발생하지요? 좋습니다. window 객체(this와 동일)는 fun 메소드를 가지고 있지 않습니다. 아래와 같이 해보세요:

o1.fun();
o2.fun();

이제 22와 33이 보이죠? 아주 좋습니다!

이제 이 복잡한 부분의 마지막입니다. 지금까지는 간단한 함수들을 사용했고 그래서 개별 객체의 타입(type)에 대해서 신경 쓸 필요가 없었습니다. 하지만 o1.fun 이 아주 기능이 많고 지난주부터 작업해서 이제 마지막 작업 단계에 있다고 칩시다. 코드 내에 산재해 있는 this 변수가 100 라인 정도 된다고 상상해 보자 구요. o1.fun을 호출(실행)시 this가 o2를 가리키고 있다면 어떻게 해결해야 할까요? 아래와 같이 입력해봅시다:

o1.fun.call(o2);

o1의 fun 메소드가 실행 중 일 때 강제로 변수 this 가 o2를 지정되게 설정된걸 보셨나요? 좀더 유식하게 말하면 다음과 같습니다: 메소드 o1.fun이 객체 o2의 스코프(scope)내에서 실행 된다

정리하면 스코프는 어떤 객체의 메서드로서 함수가 실행 중 일 때 this 변수의 값이다 라고 생각하시면 될 것 같습니다.

변수의 가시범위(Visibility)
Edit section

변수의 가시범위는 이전 단락인 스코프 항목과 밀접한 관계에 있습니다. 우리는 이미 변수(함수를 포함한 모든 변수)가 어떤 객체나 함수 밖에 선언되면 전역으로 등록 된다고 알고 있습니다. 기술적으로 다시 말하면 window 객체의 전역 프로퍼티가 되는 것이지요.

전역 변수들은 어디에서든지 보입니다;어떤 함수들의 안에서든 밖에서든. 만약 하나의 함수에서 전역 변수를 수정하게 되면 다른 함수들은 변경된 값을 보게 됩니다.

이제 객체가 자신만의 고유한 프로퍼티(앞서 testvar 예제처럼)를 갖는다는 걸 알 수 있게 되었습니다. 이것은 객체의 안과 밖에서 접근 가능한데, 맞는지 직접 시험해 봅시다:

alert(o1.testvar); // o1의 프로퍼티인 testvar를 외부에서 접근

내부에서 접근하는 것은 아까 두 개의 fun 메소드 시연에서 이미 해봤으므로 그냥 넘어 갑니다.

이제 마지막으로 남은 퍼즐의 조각은 지역 변수는 함수 내에서 var 키워드와 같이 선언 되어야 한다는 겁니다:

i = 44; 
function fn2() { 
    var i = 55; 
    alert(i); 
}
fn2();

어떤 것을 보았나요? 55 이지요. 변수 i 는 fn2 내에 선언 되어 fn2의 지역 변수가 되었고 44가 들어있는 전역 변수인 i 에 접근하지 않습니다.

하지만 이렇게 하면:

alert(i);

전역 변수 i 에 접근하기 때문에 44가 나오는 것을 볼 수 있습니다.

이 문서가 스코프와 변수 가시범위 공부에 많은 도움이 되길 바랍니다.

더 읽을만한 것들:


'Scripter > EXTJS' 카테고리의 다른 글

Extjs 기본 DomQuery  (0) 2008.02.18
Extjs 초보자를 위한 애플리케이션 레이아웃(2.02)  (8) 2008.02.17
ExtJS Tutorial  (1) 2008.02.17
ExtJS 시작하기  (8) 2008.02.17
ExtJS 개발하기 위해 선행되는 지식들  (7) 2008.02.15
Post by 넥스트리소프트 데꾸벅(techbug)
, |

ExtJS Tutorial

Scripter/EXTJS / 2008. 2. 17. 14:52
초보자
Edit section

Ext를 알고있고, 온라인 샘플들을 보았으며, 심지어 API문서를 보기 시작했다면 Ext를 쓰기 위해 근질근질 할것이다. 그런데 가지고 놀 테스트 서버가 없다.

시나리오 2 - 프로
Edit section

이미 API문서 를 파고 있고 지금 당장 사용할 메쏘드를 찾아보는걸 좋아한다. 그러나 하나의 메쏘드로 테스트하기 위해 적당한 리소스를 포함한 테스트 HTML 페이지를 만들기를 좋아한다.

이러한 이유로 이 문서에서 당장 Ext를 사용할수 있는 방법을 제시한다. 먼저 파이어폭스Firefox with Firebug installed를 설치할 필요가 있다. 파이어버그 플러그인을 설치하도록 하낟. 디버깅 툴이 있는 다른 브라우저라도 상관이 없다.

시작하기
Edit section

  • Ext API 문서를 많이 참조하라 . 기회는 언제나 당신곁에 있다.
  • F12키를 눌러 Firebug console을 열어라 (Firebug를 바로 실행했는가?)
  • 만일 파이어버그 콘솔이 '>>>'와 같이 한줄이 되어 있다면 오른쪽 하단의 빨간색 화살표를 클릭하여 멀티라인 버전으로 바꿔라 (자바스크립트 콘솔처럼 쓸수있다.)
  • 첫번째 라인에 아래와 같이 입력하고 Ctrl-Enter로 실행시켜라:
Ext.get(document.body).update('<div id="test"></div>');

위의 코드가 뜨하는 것은 DOM Body에 id가 test인 div 엘리먼트를 생성시킨다. body의 내용이 사라졌다. 그러나 Ext Library가 로드되어 있고 가지고 놀 준비가 되어있다. (HTML페이지에 Extjs 스크립트가 포함되어 있어야 한다. 그렇지 않다면 Ext is not defined 라는 에러를 볼것이다.)

이제 Ext.Panel API를 이용하여 새로운 Panel 객체를 만들어 보자. 아래 코드를 파이어 버그 콘솔에 추가한다:

Ext.get(document.body).update('<div id="test"></div>');
new Ext.Panel({
	renderTo: 'test',
	width: '200px',
	title: 'My Title',
	html: 'My HTML content'
});

Ctrl-Enter로 다시 실행하면(아래 Run을 클릭해도 된다.) 화면에 새로운 패널이 생긴걸 확인할수 있다.

그럼 여기에 Collapsible 을 가능하게 하기 위해 다른 옵션을 추가여 어떤 현상이 벌어지는지 확인하자. 파이어버그에서 아래 라인에 새로운 configuration 옵션을 추가한다.

Ext.get(document.body).update('<div id="test"></div>');
new Ext.Panel({
	renderTo: 'test',
	width: '200px',
	title: 'My Title',
	html: 'My HTML content',
	collapsible: true
});

다시 실행시키면 패널의 오른쪽 부분에 토글아이콘이 나타난것을 확인할수 있다.

매번 Ctrl-Enter를 치면서 옵션들을 추가, 삭제 하면서 작업을 해라. 과도한 configuration 옵션들은 별로 좋지 않다.(원문과는 좀 다른 느낌인데.. ) 첫번째 라인의 update()메쏘드를 이용하여 표현하고 하는 많은 HTML를 추가할수 있다.

자 그럼 아래 API 문서를 이용해 스스로 해보자!

(번역이 매끄럽지 못하고 중간중간 생략된 부분이 있으므로 다음분이 더 자세히 설명해 주실것입니다. - 김동완)

'Scripter > EXTJS' 카테고리의 다른 글

Extjs 기본 DomQuery  (0) 2008.02.18
Extjs 초보자를 위한 애플리케이션 레이아웃(2.02)  (8) 2008.02.17
Extjs scope에 대한 고찰  (2) 2008.02.17
ExtJS 시작하기  (8) 2008.02.17
ExtJS 개발하기 위해 선행되는 지식들  (7) 2008.02.15
Post by 넥스트리소프트 데꾸벅(techbug)
, |

ExtJS 시작하기

Scripter/EXTJS / 2008. 2. 17. 14:49

ExtJs란

ExtJs는 웹애플리케이션을 만들기위한 client-side-JavaScript framework이다. JackSolocum이  Yahoo! User Interface (YUI) library의 확장으로 만들기 시작했으며 Yui-ext란 Project명으로 빠르게 성장했다.


라이센스

ExtJS는 개발목적의 오픈소스로 제공되는 LGPL 라이센스와  로얄티프리 커머셜 라이센스로 구분된다.( licensing page )
상업용 라이센스는 SVN 접속이 허락되며 전화/팩스 및 이메일로 지원을 받을수 있는것이 고작(?)이다.


호환되는 서버 플랫폼

 PHP,Ruby on Rails (Embeded로 지원), .NET, Java 등 여러가지 서버 플랫폼을 지원한다. 사이트( server-side frameworks ) 를 참조하기 바란다.


ExtJS를 사용하기 위해 요구되는 라이브러리

1.0.1a 버전에서는  YUI, jQuery or Prototype/Script.aculo.us. 가 반드시 필요했으나 1.1에서는 Ext adapter를 채택하여 더이상 다른 외부 라이브러리 없이 구동할수 있다. 또한 외부 라이브러리를 사용하고 싶다면 해당 라이브러리 어답터가 별도로 구비되어 있으며 Extension Mode로 제공되는 기타 다른 라이브러리를 참조할수가 있다.

Base Library Include Order Get Library
Ext Standalone ext-base.js
ext-all.js (or your choice of files)
http://www.extjs.com/download
Yahoo! UI (.12+) yui-utilities.js (or your choice of YUI base files)
ext-yui-adapter.js
ext-all.js (or your choice of files)
http://developer.yahoo.com/yui/
jQuery (1.1+) jquery.js
jquery-plugins.js // required jQuery plugins
ext-jquery-adapter.js
ext-all.js (or your choice of files)
http://jquery.com/
http://docs.jquery.com/Plugins
Prototype (1.5+) /
Scriptaculous (1.7+)
prototype.js
scriptaculous.js?load=effects (or whatever you want to load)
ext-prototype-adapter.js
ext-all.js (or your choice of files)
http://www.prototypejs.org/
http://script.aculo.us/


3-party adapters와의 호환시 이슈사항

  • jQuery에서의 애니메이션기능(하이라이팅기능과 같은) 은 다음 사이트를 참조하라. References: 1, 2
  • DatePicker와 같은 jQuery버그를 해결하는 방안 References: 1, 2


에러상황에 따른 대처

  • 최대한 사용하는 버전의   API documentation. 를 이용한다.
  • 최신의 버전으로 유지하고 해당 사이트를 항상 방문해서 release나 bugpatch상황을 주시한다.
  • 브레이스 ( { )나 null을 리턴하는 경우 캐리지 리턴값을 주의한다.  아래와 같이 return 뒤에 한줄을 띈 ( { )는 에러를 발생시킨다. (헉~ 자바스크립트 포매터가 위험하겠군...)
var myExample = function()
{
return
{
foo: 'bar',
boo: 'far'
}
};

위의 코드는 아래와 같이 작성해야 한다.

var myExample = function()
{
return {
foo: 'bar',
boo: 'far'
}
};

만일 여의치 않다면 다음과 같이 대처한다.

  • 개발시에는 ext-all-debug.js 를 사용하여 해당 소스 추적이 쉽게 한다. 단 운영시에는 ext-all.js로 obfuscated된 버전으로 사용한다.
  • 되도록이면 스크립트 디버거를 사용하도록 한다.
    Firefox Firebug : 사용법( 
    How-to: using Firebug to debug your script  )
    IE Companion JS
  • http://blog.naver.com/techbug 사이트에서 확인가능 ^^;


다른 URL혹은 domain이 틀린 사이트에서 데이타를 가지고 오고 싶을때

아래와 같이 HttpProxy보다는 ScriptTagProxy를 사용한다.

var proxy = new Ext.data.HttpProxy({
url: '/DoSearch.php'
});
 
// Add the HTTP parameter searchTerm to the request
proxy.on('beforeload', function(p, params) {
params.searchTerm = searchValue;
});

Hidden Field 표시하는법

See http://extjs.com/forum/showthread.php?t=11698#2 or http://extjs.com/forum/showthread.php?t=6710#2


그리드의 셀에 클릭이벤트 핸들러 사용하는법(가장 많이 헷갈리고 많이 사용하는 것)

function(grid, rowIndex, columnIndex, e) {
var record = grid.getStore().getAt(rowIndex); // 레코드의 Row를 가져온다.
var fieldName = grid.getColumnModel().getDataIndex(columnIndex); // 컬럼의 필드명을 가져온다.
var data = record.get(fieldName);
}


Ajax로 불러온 마크업중의 스크립트가 실행되지 않을때

Ext.Updater.defaults.loadScripts나  Updater.update 메쏘드나 Element.update 메쏘드 사용


그리드의 Row를 각각 틀리게 표현하고 싶을때 (getRowClass를 사용한 expander사용)

http://extjs.com/deploy/dev/docs/?class=Ext.grid.GridView&member=getRowClass

load()로 빈 데이타스토어(getCount()==0)를 불러올때

HttpProxy나 ScriptTagProxy와 같이 remote data 를 사용할때  Store.load() 는 비동기로 호출되며 서버블로킹없이 즉시 요청한다. "load""loadexception"이벤트로 쉽게 작업을 할수 있다. 이후 Grid Data Load에서 설명 ^^


Ext.get으로 컴포넌트 불러올때

Ext.get 는 단지 HTML Element의 객체를 가져온다. 즉, document.getElementById와 같다.
판넬이나 폼판넬등 컴포넌트를 불러올때는 Ext.getCmp를 사용해야 한다.


tree Node에서 아이콘 표시하는법

myNode.appendChild(new AsyncTreeNode({
text: "A folder",
iconCls: "folder"
});

CSS의 class seletor를 이용한다. (CSS 표준을 항상 염두해 둘것....)

.x-tree-node img.folder, .x-tree-node-collapsed img.folder{
background: url("../images/default/tree/folder.gif");
}
 
.x-tree-node-expanded img.folder {
background: url("../images/default/tree/folder-open.gif");
}

"Ext is undefined"라고 에러 메세지 뜨면

당근 ext-all.js 파일의 패쓰가 잘못됐으니 확인해야지....쩝..이런것도 적어야 하나..

<script type="text/javasscript" src="/somepath.js"></script>
<script type="text/javascript" src="/somepath.js"></script>

"XX has no properties"라는 에러가 떨어질때

해당 엘리먼트 id값을 찾을수 없다는 얘기다. 아래에서는 id='save-button'를 가진 객체를 찾을수 없다는 얘기다.

// constructors:
var tb = new Ext.Toolbar('toolbar');
 
// creating Element references:
var saveBtn = Ext.get('save-button');
<div id="toolbar"></div>
<input id="save-button" type="button" value="Save" />

extjs.com/s.gif를 계속 찾고 있다면 아래와 같이 한다.

1x1pixel짜리 투명이미지를 절케 표시하고 있다. 잘 해두도록...

Ext.BLANK_IMAGE_URL = '/images/ext/resources/images/aero/s.gif';  // 1.1
Ext.BLANK_IMAGE_URL = '/images/ext/resources/images/default/s.gif'; // 2.0

설명서를 잘 읽어보도록...반드시....


익칠이(IE)에서는 안돌아가는데 불여우(FF)에서 잘 돌아갈때

쉼표를 잘 찾아보도록....

testFunc = function() {
return {
titlebar: true,
collapsible: true, // <--- BOOM goes the comma! :D
}
}

JSLint를 이용하면 쉽게 찾을수 있다.



가끔씩 깨진 화면들이 나올때

이런경우 난감한...문제가 발생할수도 있는데 나의 경우는 전체 화면을 다시 그린적도 있다.. ㅠ.,ㅠ;

반드시 해당 컴포넌트(판넬,폼판넬, 콤보박스, 그리드 판넬)의 ID값을 반드시 입력해 준다. 또한 같은화면에 같은 ID값을 가진 객체가 있는지 반드시 확인한다.



다른 도움을 받고 싶을을 정도로 울고 싶을때

- ExtJS Forum에 들어가 도움을 청해본다. 그리고 Google 신에게 물어본다.  답이 다 있다. 다만 시간이 걸릴뿐이다.

영어 해석은 기본, 중국어은 옵션.. ^^;  

위의 내용만 알면 어느정도 ExtJS를 사용하면서 겪을 문제를 반정도는 해결할수 있다... 나의 경우 그랬으니깐... ㅡ.,ㅡ;


끝.


'Scripter > EXTJS' 카테고리의 다른 글

Extjs 기본 DomQuery  (0) 2008.02.18
Extjs 초보자를 위한 애플리케이션 레이아웃(2.02)  (8) 2008.02.17
Extjs scope에 대한 고찰  (2) 2008.02.17
ExtJS Tutorial  (1) 2008.02.17
ExtJS 개발하기 위해 선행되는 지식들  (7) 2008.02.15
Post by 넥스트리소프트 데꾸벅(techbug)
, |
넥스트리 포스팅했던글을 다시 정리하여 올리다.
사내 제품개발시 ExtJS를 사용할 일이 있어 내용을 보다가 해당사이트(www.extjs.com)을 번역하기로 맘먹었다.



매뉴얼번역: http://extjs.com/learn/Manual:Resources

ExtJS로 개발하기 위해서는 다음과 같은 것들이 필요하다. 반드시 읽어 볼것... 이미 앞의 EXTJS 시작하기 에서  맛뵈기(?)로 보았으니 이를 개발하기 위한 준비물들이 필요하겠다.


일반적인 JavaScript Learning Guide
Edit section

참고사이트
Edit section

  1. Mozilla Developer Center: Core JavaScript 1.5 Reference Manual
  2. Yahoo UI개발자인 Douglas Crockford's JavaScript
  3. Yahoo Developer Network : YUI Theater  ( 더글라스 크록포드의 동영상 강의 수록)
  4. Peter-Paul Koch의 QuirksMode
  5. http://home.cogeco.ca/~ve3ll/jstutor0.htm

그외 볼만한 사이트(Dead Trees)
Edit section

  1. JavaScript: The Definitive Guide by David Flanagan
  2. Pro JavaScript Techniques by John Resig
  3. Ajax and REST Recipes by Christian Gross
  4. ppk on JavaScript by Peter-Paul Koch
  5. Professional JavaScript for Web Developers by Nicholas C. Zakas
  6. Ajax Patterns and Best Practices by Christian Gross
  7. Dynamic HTML by Danny Goodman
  8. Head First Design Patterns by Freeman & Freeman

 

OO JavaScript 참조사이트

  1. How to achieve private, public, and privileged members in JavaScript, by Dustin Diaz.
    : Method scoping에 대한 좋은 설명
  2. OOP in JS, Part 1 : Public/Private Variables and Methods, by Gavin Kistner.
    : Scoping 및 prototyping에 대한 샘플
  3. A JavaScript Module Pattern, by Eric Miraglia in YUI Blog.
    : 더글라스 크록포드가 얘기한 module pattern에 대한 설명
  4. Again with the Module Pattern - reveal something to the world, by Christian Heilmann.
    : 모듈패턴
  5. JavaScript for Object-Oriented Programmers (Appendix B of the book AJAX in Action).

DOM

 

 

그외 기술

Yahoo! User Interface Library (YUI)

Ext JS 은 yui-ext에서 부터 시작되었다. 아래 사이트에서 YUI에 대해서 좀 봐두는것도 좋을지도..

  1. YUI Library
  2. ydn-javascript: Yahoo! User Interface Library Group
  3. YUI Blog

JSON 관련

 

 

Platform-Specific Resources

ExtJS를 서버사이드 프레임웍으로 사용한 녀석들.....

PHP
Edit section

대표적인 샘플코드는 모두 PHP코드로 되어 있는 걸 보면  PHP에서 개발하기 가장 쉬운것 같음.
ExtJS 내장 PHP프레임웍 :  Qcodo Development Framework

Java

Direct Web Remoting (DWR) : http://getahead.org/dwr

.NET

  • AjaxPro 는 .Net 을 이용한 서버사이드 Ajax
  • Jayrock  :  .Net에 JSON / JSON-RPC 를 이용 
  • Json.NET  : .Net에서 JSON을 쓰게 만들어주는 라이브러리 (PHP의 toJSON()이나, Struts의 JSON과 같은건가 보다... ㅡ.,ㅡ; ) 

Ruby on Rails

Ext plugin - ROR는 내장 플러그인으로 작동하므로 gem을 이용해 받으면 되겠다...  (찾기가 더 힘드네.. ㅡ.,ㅡ;)

IBM Lotus Notes/Domino

IBM's Lotus Notes/Domino : IBM 머찌다라는 말만..

 

 

통합개발툴(IDE)
Edit section

Eclipse Based IDEs

Eclipse 은 오픈소스 통합개발툴 (among other things!)이다. ExtJS개발을 위해 이클립스를 사용하기 위해서는 먼저 자바스크립트 사용할수 있는 플러그인을 설치해야 한다.
아래의 플러그인을 추천한다.

  • Aptana - JavaScript, HTML, CSS, PHP languages, FTP/SFTP 지원, RIA/Web2.0등 Ajax 관련 프로젝트에 적합 (느리다는 단점이 있음.. ㅠ.,ㅠ)
  • Spket - JavaScript, XUL, SVG, Laszlo, Silverlight,등 각 모듈 라이브러리 지원(http://blog.naver.com/techbug/150024518549 )
  • JSEclipse - JavaScript

위에 열거된 플러그 인들은 각자 자바스크립트 에디터를 포함하고 있다.  자바스크립트를 열때 "Open with"로 열어서 사용하도록...플러그인을 선택할때는 코드 assist를 지원하는지 확인해 봐야 할듯

 

Aptana + Spket + ExtJS(강추..)
  • Aptana다운로드 http://www.aptana.com/download_all.php
  • Aptana > Help > Software Updates > Find and Install > Search for new features to install > New remote site.. > "http://www.spket.com/update/"
  • Spket설치 ( Spket IDE Tutorial )
    1. Window > Preferences > Spket > JavaScript Profiles > New > "ExtJS"
    2. "ExtJS" 선택하고  "Add Library"에서 "ExtJS"선택
    3.  "ExtJS" 선택하고 "Add File", 에서 "./ext-2.0/source" 디렉토리에서 "ext.jsb"를 선택
    4. ExtJS profile을 디폴트로 선택 
    5. Aptana 플러그인을 새 시작
    6. 새로운 JS파일을 만들면 ExtJS의 Code completion options를 볼수 있다.

AptanaIDE

  • Aptana는 상당히 매력적인 플러그인다. 대부분의 Ajax Library를 제공한다.

 

 


 

다양한 디버깅툴

Firebug (FF에서 강추)

Firebug는 Firefox에 애드온되어 작용하는데 웹페이지의 내용(CSS,HTML,Javscript등)을 실시간으로 볼수있는 상당히 매력적인 도구이다.


Screencasts


Tutorials


다른 브라우저에서 Firebug console을 이용하기

HTTP Trafic Viewer

피들러는 서버와 PC사이의 HTTP 트래픽 로그를 볼수 있는 디버깅 프록시이다. IE전용이나 Firefox의 proxy고급옵션에서 사용할수 있으며 자신이 원하는대로 필터링 하여 사용할수 있다.

MS Script Editor

IE Web Developper

IE WebDeveloper는 인터넷 익스플로러 애드온 프로그램이다. 

Testing Data Generator

SQL,CSV,xml, excel등 테스트 데이타를 생성해준다.

http://www.benjaminkeen.com/software/data_generator/

YSlow

YSlow는  rules for high performance web sites를 기반으로 현재 페이지의 속도를 분석해준다. YSlow 는 Firefox 애드온 프로그램으로 인기가 있다.Firebug web development tool.

  • Performance report card
  • HTTP/HTML summary
  • List of components in the page
  • Tools including JSLint

http://developer.yahoo.com/yslow/

DebugBar - IE 플러그인 (강추)

  • DOM Inspector,
  • HTTP Inspector
  • Javascript Inspector and Javascript Console
  • HTML Validator
  • And many more features

http://www.debugbar.com/?langage=en


'Scripter > EXTJS' 카테고리의 다른 글

Extjs 기본 DomQuery  (0) 2008.02.18
Extjs 초보자를 위한 애플리케이션 레이아웃(2.02)  (8) 2008.02.17
Extjs scope에 대한 고찰  (2) 2008.02.17
ExtJS Tutorial  (1) 2008.02.17
ExtJS 시작하기  (8) 2008.02.17
Post by 넥스트리소프트 데꾸벅(techbug)
, |