한동안 업무에 바빠 회사에서 매일 야근 ㅠ-ㅠ 하느라 포스팅 할 시간이 없네요..
이제는 IT 가 3D (Dangerous , Difficult , Dirty ) 업종이 아니라 4D 라고 하네요..
하나 더 추가된 D 는 Dreamless -_-;;;;;
희망도 없는건가요... ^^;; 하하하-
자, 이제는 ExtJS 3 라이브러리를 이용하여 Form 을 만들어 봅시다.
오늘만들 화면은 다음과 같은 화면입니다 ^^
1. 날짜필드,
2. 유효성 검증
3. 오류메시지
>> 알아두기
Ext 컴포넌트 대부분의 환경설정 옵션 이름은 HTML 과 같다.
( Why? Ext는 웹개발자에 의해 웹개발자를 위해 만들어 졌다고 한다 ^^)
1. 다음과 같이 뼈대를 만들어 보도록 합니다.
-
Ext.onReady(function(){
-
// FormPanel : FORM 요소를 랜더링 하고 하위컴포넌트를 배치하기 위한 레이아웃을 사용하는 특화된 Panel 서브클래스
-
var movie_form = new Ext.FormPanel ({
-
// url : 데이터 보내야 하는곳 설정 (renderTo 옵션을 가짐)
-
url : '',
-
//renderTo : 이미 존재하는 어떤 요소레 생성한 폼을 덧붙일지를 결정
-
renderTo : Ext.getBody(),
-
frame : true,
-
title : '영화 정보 폼',
-
/*
-
* items : 모든 하위 컴포넌트를 명시
-
* 각 배열요소들은 xtype 옵션을 가진 환경설정 객체
-
* xtype : 어떤 종류의 ExtJS 컴포넌트가 사용될 것인지 정의
-
*/
-
items :
-
[{
-
}]// end form Panel items
-
});
-
});
이제 width : 650 을 정하므로써 폼의 사이즈는 가로 650이라고 명시를 해 주었습니다 ^^
앞으로 items 안에 모든 하위 컴포넌트를 명시해 줄 것 입니다.
다음과 같은 구조로 코딩이 되겠습니다.
-
items:[{
-
//항목1
-
},{
-
//항목2
-
},{
-
//항목3
-
}]
먼저 제목을 만들어 보겠습니다.
2. input box 만들기
각 배열 요소들은 xtype 옵션을 가진 환경 객체로 xtype 은 어떤 종류의 Ext JS 컴포넌트가 사용될 것인지 정의합니다.
xtype 은 특정 ExtJS 컴포넌트 클래스와 연관된 문자열 키 (Key) 입니다.
자세한 사항은 ExtJS API 를 참조하시면 됩니다 ^^
-
{
-
xtype : 'textfield',
-
fieldLabel : '제목', // fieldLabel : 필드의 이름표
-
name : 'title',// name : 폼데이터가 서버에 보내질때 매개변수 이름으로 사용
-
allowBlank : false// (유효성검증) 필수값 체크
-
}
* xtype 의 종류
textfield - 텍스트 필드 설정
timefield - 시간 필드 설정
numberfield - 숫자 필드 설정
datafield - 날자 필드 설정
combo - 콤보박스 설정
textarea - Editor (Text 영역) 설정
textfield - 텍스트 필드 설정
timefield - 시간 필드 설정
numberfield - 숫자 필드 설정
datafield - 날자 필드 설정
combo - 콤보박스 설정
textarea - Editor (Text 영역) 설정
3. 다음 xtype 을 이용하여 날짜 field 와 유효성 검증을 해 봅시다.
-
{
-
xtype : 'textfield',// 텍스트 박스 생성
-
fieldLabel : '감독',
-
name : 'director',
-
// vtype : 'alpha' , // (유효성검증) 알파벳 문자로만 구성되는지 확인
-
// 내장되어있는 유용한 vtype : email , url , alpha, alphanum
-
vtype : 'name'
-
},{
-
xtype : 'datefield',// 날짜필드 생성
-
fieldLabel : '개봉',
-
name : 'released',
-
disabledDays : [1,2,3,4,5] // (유효성검증) 그 주의 어떤날짜를 비활성화 하는 옵션
-
// 일주일은 일요일 (숫자 : 0 ) 으로 시작 ~ 토요일 (숫자 : 6 )
-
}
vtype 옵션을 주어 검증에 대해 오류메시지를 보이고 값을 제한하는데 사용됩니다.
ExtJS API 에 가면 더 많은 vtype 에 대해 찾아 볼 수 있습니다 ^^
disabledDay 옵션을 주어 토요일과 일요일은 비활성화 하였습니다 ^^
3-2.사용자 정의 vtype 을만들어 보겠습니다.
-
/*******************************************************************************
-
* 사용자 정의 vtype 만들기
-
* Exam > 각 단어의 첫 글자는 대문자이고, 한 글자 이상의 문자로 이루어져 있는지 확인
-
*******************************************************************************/
-
Ext.apply(Ext.form.VTypes, {
-
nameVal : /^[A-Z][A-Za-z]+\s[A-Z][A-Za-z]+$/ , //대조해볼 정규표현식
-
nameMask : /[A-Za-z]/ , //사용자가 입력값을 제한하기 위한 마스킹
-
nameText : '감독 이름이 정확하지 않습니다.' , //보여줄 오류메시지
-
name : function(v) { //실질적인 함수로 위에서 정의한 것을 실제로 사용할수 있게하는 부분
-
return this.nameVal.test(v);
-
}
-
});
다음과 같이 유효성 조건에 맞지 않는다면 이렇게 보여 줄 것 입니다 ^^
4. 라디오 버튼과 체크 박스
-
{
-
/*
-
* radio 버튼
-
*/
-
xtype :'radiogroup',//radioBox
-
fieldLabel : '필름 정보',
-
columns : 1,
-
name : 'filmed_in',//HTML 과 유사하게 name 으로 radioGroup 속성을 이용한다.
-
items:
-
[{
-
name : 'filmed_in',
-
boxLabel :'컬러',// radio 버튼 옆의 이름
-
inputValue : 'color'// radio 버튼의 값
-
},{
-
name : 'filmed_in',
-
boxLabel :'흑백',
-
inputValue : 'B&W'
-
}] //end radio button items
-
},
{ -
/*
-
* checkBox
-
* check Box 는 checked 옵션을 가짐. true , false
-
*
-
*/
-
xtype : 'checkbox',
-
fieldLabel : '나쁜영화',
-
name : 'bad_movid',
-
checked : true
-
},
{ -
/*
-
* composite field 를 이용한다.
-
* 아래 사이트에 다 나와있슴
-
* http://dev.nerv.kr/ext-3.3.1/docs/?class=Ext.Component
-
*/
-
xtype : 'compositefield',
-
fieldLabel : '다중체크',
-
items : [{
-
xtype : 'checkbox',
-
name : 'chk',
-
boxLabel : 'A'
-
}, {
-
xtype : 'checkbox',
-
name : 'chk',
-
boxLabel : 'B',
-
checked: true
-
}] // end check box items
-
},
{ -
xtype : 'compositefield',
-
// fieldLabel : '다중체크',
-
items : [{
-
xtype : 'checkbox',
-
name : 'chk',
-
boxLabel : 'C',
-
checked: true
-
}, {
-
xtype : 'checkbox',
-
name : 'chk',
-
boxLabel : 'D'
-
}] // end check box items
-
}
5. 콤보 박스
먼저 콤보박스에 나올 데이터를 미리 하나 만들어 두도록 합니다.
-
/*******************************************************************************
-
* combo box 를 만들기 위한 예제 데이터
-
*******************************************************************************/
-
fields : ['id', 'genre_name'],
-
});
-
{
-
/*
-
* combo Box : 로컬데이터로 미리 로딩해둘 만큼
-
* 작은 리스트거나 자주 변경되지 않을만한 데이터에 좋다
-
* (select box)
-
*/
-
xtype : 'combo',
-
hiddenName : 'genre',
-
fieldLabel :'장르',
-
mode : 'local',// mode : 콤보박스의 항목을 저장소로 부터 미리 로딩 : local
-
// 서버에 질의하여 동적으로 데이터 로딩 : remote
-
store : genres,// store : 콤보박스에 제공되는 데이터 저장소
-
displayField : 'genre_name',// displayField : 각 항목의 텍스트를 제공할 필드를 정하는 옵션
-
valueField : 'id',// valueField : 각 항목의 값을 제공할 필드를 정하는 옵션
-
// 이 옵션을 사용하려면 hiddenName 옵션을 명시
-
triggerAction: 'all'// 이 옵션을 통해 한번 선택 한 후 다시 선택시 보기들이 나올수 있도록 한다.
-
}
6. TextArea 영역과 HTMLEditor
-
{
-
/*
-
* TextArea 영역
-
*/
-
xtype : 'textarea',// 전형적인 HTML 의 textarea 필드와 유사
-
name : 'description',
-
hideLabel : true,
-
anchor : '100%'
-
},{
-
/*
-
* HTML Editor
-
*/
-
xtype : 'htmleditor',// 풍부한 편집 환경을 제공하는 텍스트 편집기
-
name : 'description',
-
hideLabel : true,// 왼쪽에 표시되는 레이블을 숨긴다.
-
anchor : '100%'
-
}
뭐.. 별거 없는데 소스코드를 일일히 나열하니 굉장히 길어 보이네요~
전체적인 HTML 소스는 다음과 같습니다. (필요한 전체적인 흐름만 참조하세요... TAB 간격 정리를 안해두었습니다.)
이해가 안가시는 분들께서는 다음 파일을 올려두니, 테스트 하시면서 익혀보시기 바랍니다 ^^
URL 은 다음과 같겠죠?~! ^-^
http://아이피:포트/extjs3/ch03_01.html
'JavaScript > ExtJs' 카테고리의 다른 글
[ExtJS 3] 10. ExtJS ToolBar 툴바 만들기 (4) | 2011.09.07 |
---|---|
[ExtJS 3] 9. ExtJS Form 예제 만들기 (버튼, 이벤트) (0) | 2011.09.04 |
[ExtJS 3] 7. ExtJS Form 이란? (1) | 2011.08.21 |
[ExtJS 3] 6. Ext.Panel 클래스 (0) | 2011.08.21 |
[ExtJS 3] 5. Ext.get 함수와 Ext.fly 함수 (1) | 2011.08.21 |