8. ExtJS Form 예제 만들기에 이어 조금더 추가된 Form 을 만들어 보겠습니다!
(몇가지 안되요 ㅎㅎ)
1. 사용자가 장르의 새로운 장르를 선택하였을때 prompt 가 뜨도록 만들어 보겠습니다.
2. 다음은 Form 을 생성하였으면, Submit 을 날리거나, 초기화 하는 이벤트가 발생하기 위해서 버튼을 만들어 보겠습니다.
1. 장르의 새로운 장르를 추가하여, Prompt 창을 띄우도록 합니다
콤보박스에 불뤼어 지는 예제 데이터에 0 , '새로운 장르' 라는 항목을 추가하도록 합니다.
-
/*******************************************************************************
-
* combo box 를 만들기 위한 예제 데이터
-
*******************************************************************************/
-
var genres = new Ext.data.ArrayStore({
-
fields : ['id', 'genre_name'],
-
data : [['0','새로운장르'],['1','코미디'] , ['2','드라마'],['3','액션']]
-
});
그리곤 combo 의 listeners 라는 옵션을 추가하여 정의해 줍니다.
* listeners 란 옵션은
특정 이벤트(필트값이 변경되는 등, 사용자에 의한 이벤트 or 컴포넌트의 생성 ,삭제에 따른 코드에 의한 이벤트)
발생으로 호출되는 이벤트 처리를 합니다.
바로 11번째 줄의 listeners 라는 속성이 추가 되었네요... ^^
-
{
-
xtype : 'combo',
-
hiddenName : 'genre',
-
fieldLabel :'장르',
-
mode : 'local',
-
store : genres,
-
displayField : 'genre_name',
-
valueField : 'id',
-
width : 120,
-
triggerAction: 'all',
-
listeners : {
-
select : function(field, rec , selIndex) {
-
if(selIndex == 0 ) {
-
Ext.Msg.prompt('New Genre', 'Name', Ext.emptyFn);
-
}
-
}
-
}
-
}
이므로 인덱스값이 0 이면, 프롬프트 다이얼로그를 띄우도록 했습니다.
2. 저장과 초기화 버튼
버튼 생성은 items 안에 들어가지 않습니다.
items 는 Form 안에 쓰일 여러가지 컴포넌트들을 명시한 것이고,
폼 전체에 대한 저장과 초기화가 들어가야 하기 때문에 buttons 라는 속성은
items 와 같은 위치에 명시해 줍니다 ^^
다음과 같은 구조로 말이죠~! ^-^
-
items : [{
-
//항목1
-
},{
-
//항목2
-
}],
-
buttons : [{
-
//버튼1
-
},{
-
//버튼2
-
}]
저장과 초기화 소스는 다음과 같습니다.
-
buttons:[{
-
text:'저장',
-
handler : function(){
-
movie_form.getForm().submit({
-
success:function(form, action) {
-
Ext.Msg.alert('성공','잘 처리되었습니다');
-
}, failure : function(form, action) {
-
Ext.Msg.alert('경고','오류!');
-
}
-
});
-
}
-
},{
-
text:'초기화',
-
handler : function(){
-
movie_form.getForm().reset();
-
}
-
}]
* 서버 응답처리
success : 성공 (true)
failure : 실패 (false)
submit( ExtJS 컴포넌트, ExtJS Action객체)
ExtJS Action 객체 옵션
1. failureType (데이터형 : String) : failure 가 클라이언트 측에서 발생했는지, 서버측에서 발생했는지에 대한 것.
2. response (데이터형 : Object) : 가공되지 않은 서버응답, 유용한 헤더정보도 포함하고 있다.
3. result (데이터형 : Object) : 반환된 응답을 기반으로 가공된 JSON 객체
4. type (데이터형 : String) : 실행된 동작의 형태, submit 또는 load
1. failureType (데이터형 : String) : failure 가 클라이언트 측에서 발생했는지, 서버측에서 발생했는지에 대한 것.
2. response (데이터형 : Object) : 가공되지 않은 서버응답, 유용한 헤더정보도 포함하고 있다.
3. result (데이터형 : Object) : 반환된 응답을 기반으로 가공된 JSON 객체
4. type (데이터형 : String) : 실행된 동작의 형태, submit 또는 load
다음과 같이 failureType 을 체크하여 서버 연결 오류였는지 알수 있고,
result 와 response 속성을 통해 서버측 특정 오류메시지의 상세 내용을 알수 있습니다. ^^
오류메시지에 따른 동작을 결정하는 것도 개발자의 필수 과제중 하나인것 같네요~ ^^
-
failure : function (form, action) {
-
if(action.failureType == Ext.form.Action.CLIENT_INVALID) {
-
Ext.Msg.alert("전송할수 없습니다.","유효하지 않은 파일이 있습니다");
-
} else if (action.failureType === Ext.form.Action.CONNECT_FAILURE){
-
Ext.Msg.alert("실패","서버연결실패:"+action.response.status+action.response.statusText);
-
} else if (action.failureType === Ext.form.Action.SERVER_INVALID) {
-
Ext.Msg.alert("경고",action.result.errormsg);
-
}
-
}
=== 연산자란?
데이터 타입까지 같아야 true 입니다.
script 에서 4 == "4" 는 true, 4 === "4" 는 false 라고 하네요.
-> antop 의 설명! )
자, 오늘은 여기까지~!
어느정도 기초가 조금씩 쌓아가 지고 있나요?
전 볼때마다 새록새록 한것 같아요 ㅋㅋㅋㅋ
뭐, 하다보면 익숙해 져야 할텐데... 핑계아닌 핑계로 점점 ExtJS 를 접하는 시간이 멀어져 가는것 같네요.
좀 더 분발해야 겠습니다! ^-^
Cheer Up!
다음번에는 메뉴, 툴바에 대해서 보도록 합시다~!
'JavaScript > ExtJs' 카테고리의 다른 글
[ExtJS 3] 11. ExtJS 버튼 이벤트 및 이벤트 처리 함수 (1) | 2011.10.20 |
---|---|
[ExtJS 3] 10. ExtJS ToolBar 툴바 만들기 (4) | 2011.09.07 |
[ExtJS 3] 8. ExtJS Form 예제 만들기 (radio, check, textarea, input , date, combo) (0) | 2011.09.02 |
[ExtJS 3] 7. ExtJS Form 이란? (1) | 2011.08.21 |
[ExtJS 3] 6. Ext.Panel 클래스 (0) | 2011.08.21 |