책 소개
[ 이 책에서 다루는 내용 ]
■ 모범 사례를 따라 애플리케이션을 구성하고, DOM을 조작하며, 사용자와 프레임워크로 인해 발생하는 이벤트를 다루는 방법
■ Ext JS에서 사용할 수 있는 레이아웃을 알아보고, 이들을 조합하는 방법
■ 미려하고 사용자 친화적인 폼 만들기, 클라이언트 측 유효성 검사, 서버 제출 방법
■ 트리와 탭 방식의 레이아웃, 데이터뷰, 템플릿에서 데이터를 구성하고 다루는 방법
■ AJAX 요청과 모델 데이터 객체 만들기, Ext.Direct 사용, CRUD 동작으로 데이터 조작, HTML5를 사용해 로컬 저장소로 통합하는 방법
■ SASS와 컴퍼스(Compass)를 활용해 애플리케이션 외관을 사용자 정의하는 방법
[ 이 책의 대상 독자 ]
이 책의 대상 독자층은 초보자이거나, 알고 있는 지식을 확장해 상호작용하는 웹 애플리케이션을 만들고자 하는 Ext JS 경험자 모두를 대상으로 한다.
[ 이 책의 구성 ]
1장 ‘클래스, 객체지향 원칙, 애플리케이션 구조화’에서는 Ext JS 4의 새로운 클래스 체계를 활용하고 MVC 패턴을 이용해 애플리케이션을 설계하며 프레임워크의 기능을 확장하는 방법을 다룬다.
2장 ‘DOM 조작, 이벤트 핸들링, AJAX 요청 생성’에서는 문서 객체 모델(DOM) 엘리먼트를 선택하고 생성, 조작하는 방법을 배운다. 기본 제공 애니메이션을 엘리먼트에 적용하거나 사용자 애니메이션을 만드는 방법도 살펴본다. AJAX 요청을 생성하는 방법과 데이터를 JSON이나 HTML 형식으로 인코딩, 디코딩하는 방법을 설명한다. 그 밖에 이벤트 핸들링, 날짜 다루기, 브라우저 기능 알아내기, 객체 타입이나 값 평가도 다룬다.
3장 ’컴포넌트 배치’에서는 Ext JS 4의 레이아웃 시스템을 살펴보고 UI 컴포넌트 배치 방법을 설명한다. 이 장에서는 FitLayout, BorderLayout, HBoxLayout, VBoxLayout, ColumnLayout, TableLayout, AccoridionLayout, CardLayout, AnchorLayout, AbsoluteLayout을 다룬다. 말미에는 이러한 레이아웃을 조합해 리치 애플리케이션(rich desktop-style application) 프레임워크를 구축하는 예제를 실었다.
4장 ‘UI 블록 쌓기: 트리, 패널, 데이터뷰’에서는 Ext JS의 기본 컴포넌트 중 리치 애플리케이션을 제작하는 데 필수적인 세 가지 UI 컴포넌트를 소개한 다음, 어떻게 설정하고 사용하는지 살펴볼 것이다.
5장 ‘폼 로딩과 제출, 유효성 검사’에서는 Ext JS 4의 폼(form)을 소개한다. 첫 번째 예제로 고객 문의 페이지 만들기를 실습해본다. 특정 필드에 치중하기보다 폼 사용의 포괄적인 방법을 설명한다. 특히 폼 채우기나 제출, 클라이언트 유효성 검사, 콜백/예외 처리 등을 다룬다.
6장 ‘폼 필드 사용과 설정’에서는 완벽한 사용자 경험을 제공하는 폼을 만들어나가기 위해 Ext JS 4의 기본 폼 필드와 기능을 사용하고 설정하는 방법을 비중 있게 다룬다. 다양한 폼 필드를 알아보고, 기본 제공 폼 필드를 설정하는 방법부터 부드럽고 연결성 있는 사용자 경험을 제공하기 위해 폼 필드 레이아웃을 사용자 정의하는 방법까지 배워본다.
7장 ‘Ext JS 데이터 패키지’에서는 데이터 패키지의 핵심 주제를 다룬다. 특히, 모델(model)과 스토어(store), 프록시(proxy)가 어떻게 애플리케이션의 데이터를 구조화하는지 예제를 통해 설명한다.
8장 ‘표 데이터 표현과 편집’에서는 간단한 그리드 기초부터 스크롤 기능이 제공된 그리드와 그루핑 같은 고급 주제를 다룬다. 또한 데이터를 쉽게 편집하거나 변경하고 다른 Ext JS 컴포넌트와 그리드를 연결하는 방법을 다룬다.
9장 ‘버튼과 메뉴로 툴바 구성’에서는 가장 기본적인 애플리케이션 상호작용 도구인 툴바와 버튼, 메뉴를 살펴본다. 툴바는 대부분 사용자에게 친숙한 안내 도구이며, 사용자가 애플리케이션을 처음 접할 때 어디부터 출발해야 하는지 알려주는 역할을 한다. 9장에서는 이렇게 중요하게 다뤄지는 컴포넌트를 살펴보고 동적인 사용자 경험을 제공하기 위해 애플리케이션에 추가하는 방법을 알아본다.
10장 ‘그리기와 차트’에서는 Ext JS 4에 새롭게 도입된 차트(chart)와 그리기(drawing) 사용법을 소개한다. 특히, 다양한 차트 데이터를 표현하는 여러 가지 방법을 알아본다. 기본 차트 패키지로 사용되는 Ext.draw 패키지를 익힌다. 우선 도형과 텍스트 그리기가 가능한 도구를 소개한 다음, 빨리 만들 수 있는 매력적이고 상호작용적인 차트를 앱으로 통합할 수 있게 해주는 Ext.chart 클래스를 배워본다.
11장 ‘테마 적용’에선 Ext JS로 만들어진 애플리케이션의 외관을 원하는 대로 변경하는 법을 설명한다. SASS와 컴퍼스(Compass)의 기본 사용법부터 SASS 컴파일에 이르는 수준까지를 배운다. 그 후 SASS 옵션과 사용자 정의 믹스인으로 테마를 어떻게 사용자 정의하는지 살펴본다. 말미에는 센차 SDK에 있는 슬라이스 도구를 사용해 레거시 브라우저를 다루는 방법도 알아본다.
12장 ‘완벽한 애플리케이션을 위한 고급 Ext JS’에서는 좀 더 돋보이는 애플리케이션을 만들기 위한 Ext JS의 고급 주제를 다룬다. 첫 번째는 텍스트 필드에 추가하는 플러그인으로 편집 모드와 표시 모드 사이를 전환하는 기능을 구현해본다. 다음으로는 예제를 통해 애플리케이션 구조화에 추천되는 MVC 패턴을 알아본다. 우선 파일과 클래스 구조를 알아본 뒤 애플리케이션과 함께 연동되는 방법을 배운 다음, 앞서 본 예제를 MVC 패턴을 준수하는 구조로 만들어본다. Ext.Direct 패키지가 폼과 스토어를 어떻게 연동해서 서버 통신을 수행하는지 살펴보고 그 밖에 상태 관리와 예외 처리, 이력 관리, 작업 관리 같은 고급 주제도 설명한다.
목차
목차
- 1장 클래스, 객체지향 원칙, 애플리케이션 구조화
- 개요
- Ext JS의 새로운 클래스 체계를 이용한 사용자 정의 클래스 생성
- 클래스 상속
- 클래스에 믹스인 추가
- 함수 스코프
- Ext JS 클래스 동적 로딩
- 컴포넌트 에일리어스
- 컴포넌트 쿼리로 컴포넌트에 접근
- Ext JS 컴포넌트 확장
- Ext JS 기능 오버라이딩
- 2장 DOM 조작, 이벤트 핸들링, AJAX 요청 생성
- 개요
- DOM 엘리먼트 선택
- DOM 트리 순회
- DOM 엘리먼트 조작
- 새로운 DOM 엘리먼트 생성
- 엘리먼트와 컴포넌트의 이벤트 핸들링
- 자식 객체로 이벤트 위임
- 간단한 엘리먼트 애니메이션
- 사용자 정의 애니메이션
- 날짜 데이터 분석, 형식화, 조작
- AJAX를 이용한 데이터 로딩
- JSON 데이터 인코딩과 디코딩
- 3장 컴포넌트 배치
- 개요
- FitLayout으로 컴포넌트 확장
- VBoxLayout으로 수직 레이아웃 만들기
- HBoxLayout으로 수평 레이아웃 만들기
- ColumnLayout으로 콘텐츠 나타내기
- AccordionLayout으로 축소 가능한 레이아웃 만들기
- CardLayout으로 스택 컴포넌트 나타내기
- 부모 크기에 비례하는 앵커 컴포넌트 만들기
- BorderLayout으로 전체 화면 애플리케이션 만들기
- 다양한 레이아웃 조합
- 4장 UI 블록 쌓기: 트리, 패널, 데이터뷰
- 개요
- 서버에서 트리 노드 가져오기
- 트리 노드 정렬
- 드래그 앤 드롭으로 노드 이동
- 트리 메뉴에서 또 다른 패널로 콘텐츠 가져오기
- 패널 가장자리로 아이템 고정
- 윈도우로 간단한 폼 나타내기
- 탭에 툴팁 나타내기
- 탭 패널의 탭바 조작
- XTemplate에서 인라인 자바스크립트 실행
- Ext.XTemplate 멤버 함수 만들기
- Ext.XTemplate에 로직 추가
- Ext.XTemplate의 날짜 형식화
- 데이터 스토어와 연결된 데이터뷰의 생성
- 데이터뷰 클릭으로 상세 정보 표시
- 5장 폼 로딩과 제출, 유효성 검사
- 개요
- 복잡한 폼 레이아웃 구성
- 폼 데이터 채우기
- 폼 데이터 제출
- VType으로 폼 필드 유효성 검사
- 사용자 정의 VType 만들기
- 서버에 파일 업로드
- 예외 처리와 콜백 함수 다루기
- 6장 폼 필드 사용과 설정
- 개요
- 라디오 버튼 나열
- 체크박스 그룹 덧붙이기
- JSON으로부터 체크박스 그룹을 동적으로 만들기
- 날짜 필드에서 선택 가능한 범위 설정
- 날짜 필드 로딩과 구문 분석
- 스피너 필드를 사용한 숫자 입력
- 슬라이더 필드 값 조정
- 콤보박스에 서버 데이터 로드
- 콤보박스 자동완성
- 콤보박스 아이템 렌더링
- HTML 필드를 사용한 리치 에디터
- 반복되는 폼 필드와 필드셋 생성
- 폼 필드 결합
- 7장 Ext JS 데이터 패키지
- 개요
- 데이터 객체 모델링
- 프록시를 이용한 모델 로딩과 저장
- 스토어로 크로스도메인 데이터 로드
- 모델 관계 설정과 중첩 데이터 로딩
- 모델 필드의 유효성 검사
- 스토어 데이터 그룹핑
- 스토어 예외 처리
- HTML5 로컬 저장소의 데이터 저장과 로딩
- 8장 표 데이터 표현과 편집
- 개요
- 간단한 표 데이터 나타내기
- RowEditor로 그리드 데이터 편집
- 페이징 툴바 추가
- 스크롤 기능이 제공된 그리드에서 데이터 다루기
- 드래그 앤 드롭으로 그리드 간 레코드 이동
- 그리드 그룹 생성
- 템플릿 컬럼을 사용한 그리드 셀의 사용자 지정 렌더링
- 그리드 데이터의 합계 행 만들기
- RowBody 기능으로 전체 행 너비에 맞게 데이터 표현
- 그리드 행에서 동작하는 컨텍스트 메뉴 추가
- 선택한 행으로 폼 채우기
- 그리드 액션 컬럼에 버튼 추가
- 9장 버튼과 메뉴로 툴바 구성
- 개요
- 스플릿 버튼 생성
- 컨텍스트 메뉴 사용
- 콤보박스를 툴바에 추가해 그리드 필터링
- 메뉴에서 색상 선택기 사용
- 10장 그리기와 차트
- 개요
- 기본 도형 그리기
- 그라데이션 적용
- 패스 그리기
- 스프라이트의 전환과 상호작용
- 외부 데이터로 막대 차트 생성
- 로컬 데이터로 파이 차트 생성
- 연속으로 갱신되는 데이터로 선형 차트 만들기
- 레이블, 색상, 축 서식 사용자 정의
- 차트 컴포넌트의 이벤트
- 그리드 편집으로 차트 갱신
- 11장 테마 적용
- 개요
- 컴퍼스로 SASS 컴파일
- SASS 소개
- Ext JS의 SASS 변수 사용
- UI 설정 옵션
- 테마 믹스인 생성
- 패널 스타일 재정의
- 레거시 브라우저를 지원하는 이미지 만들기
- 12장 완벽한 애플리케이션을 위한 고급 Ext JS 활용
- 개요
- 플러그인의 고급 기능
- MVC 패턴으로 애플리케이션 설계
- 사용자 동작을 제어하는 컨트롤러 액션 추가
- MVC 패턴으로 실전 애플리케이션 만들기
- 센차 SDK 도구로 애플리케이션 만들기
- Ext Direct 시작
- Ext Direct를 사용한 폼 로딩과 제출
도서 오류 신고
정오표
정오표
[ p69 예제코드 ]
4.2.1 부터는 Ext.application 의 Config options 에서 'name' 은 필수 사항입니다. 즉, name 이 누락된 경우 해당 예제는 작동하지 않습니다. http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.app.Application
[ p76 19행 ]
var owerfulThemingEl -> var powerfulThemingEl
[ p185 22, 29행 (띄어쓰기 오류) ]
div.bug-wrapperspan.title -> div.bug-wrapper span.title
div.bug-wrapperspan.severity -> div.bug-wrapper span.severity
[ p186 13, 19, 29, 32행 (띄어쓰기 오류) ]
div.bug-wrapperspan.description -> div.bug-wrapper span.description
div.bug-wrapperspan.status -> div.bug-wrapper span.status
div.bug-wrapperspan.status.open -> div.bug-wrapper span.status.open
div.bug-wrapperspan.status.complete -> div.bug-wrapper span.status.complete
[ p253 16행 ]
Ext.data.Strore -> Ext.data.Store
[ p316 23행 ]
Ext.create('Ext.grid.Pane', { --> Ext.create('Ext.grid.Panel', {
[ p342 12행 ]
}]
,
});
-->
}]
,
renderTo: Ext.getBody()
});
[ p343 10행(쌍따옴표 오류) ]
data-qtip="{Description}'
-->
data-qtip="{Description}"
[ p407 17행 ]
fill: '#3B5323'; -> fill: '#3B5323'
2015.1.7 수정사항
p.407 17번째 줄
fill: '#3B5323'; -> fill: '#3B5323'