jEasyUI 양식용 CRUD 애플리케이션


DataGrid 보기를 'detailview'로 전환하면 사용자는 행을 확장하여 행 아래에 일부 행 세부 정보를 표시할 수 있습니다. 이 기능을 사용하면 세부 정보 패널에서 양식을 편집하는 데 적합한 레이아웃을 제공할 수 있습니다. 이 튜토리얼에서는 DataGrid 구성 요소를 사용하여 편집 양식이 차지하는 공간을 줄입니다.

18.png

1단계: HTML 태그에 데이터 그리드(DataGrid) 정의

<table id="dg" title="My Users" style="width:550px;height:250px"
		url="get_users.php"
		toolbar="#toolbar"
		fitColumns="true" singleSelect="true">
	<thead>
		<tr>
			<th field="firstname" width="50">First Name</th>
			<th field="lastname" width="50">Last Name</th>
			<th field="phone" width="50">Phone</th>
			<th field="email" width="50">Email</th>
		</tr>
	</thead>
</table>
<div id="toolbar">
	<a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newItem()">New</a>
	<a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyItem()">Destroy</a>
</div>

2단계: 데이터 그리드(DataGrid)에 상세 뷰 적용

$('#dg').datagrid({
	view: detailview,
	detailFormatter:function(index,row){
		return '<div class="ddv"></div>';
	},
	onExpandRow: function(index,row){
		var ddv = $(this).datagrid('getRowDetail',index).find('div.ddv');
		ddv.panel({
			border:false,
			cache:true,
			href:'show_form.php?index='+index,
			onLoad:function(){
				$('#dg').datagrid('fixDetailRowHeight',index);
				$('#dg').datagrid('selectRow',index);
				$('#dg').datagrid('getRowDetail',index).find('form').form('load',row);
			}
		});
		$('#dg').datagrid('fixDetailRowHeight',index);
	}
});

데이터 그리드에 상세 뷰를 적용하려면 (DataGrid), html 페이지 헤드에 'datagrid-detailview.js' 파일을 추가합니다.

'detailFormatter' 함수를 사용하여 행 세부정보를 생성합니다. 이 경우 편집 양식이 포함된 빈 <div> 사용자가 행 확장 버튼('+')을 클릭하면 'onExpandRow' 이벤트가 트리거되고 ajax를 통해 편집 양식(form)이 로드됩니다. 행 세부 정보 패널을 찾을 수 있도록 'getRowDetail' 메서드를 호출하여 행 세부 정보 컨테이너를 가져옵니다. 행 세부사항에 패널을 생성하고 'show_form.php'에서 반환된 편집 양식을 로드합니다.

3단계: 편집 양식(Form) 만들기

편집 양식(form)이 서버에서 로드됩니다.

show_form.php
<form method="post">
	<table class="dv-table" style="width:100%;background:#fafafa;padding:5px;margin-top:5px;">
		<tr>
			<td>First Name</td>
			<td><input name="firstname" class="easyui-validatebox" required="true"></input></td>
			<td>Last Name</td>
			<td><input name="lastname" class="easyui-validatebox" required="true"></input></td>
		</tr>
		<tr>
			<td>Phone</td>
			<td><input name="phone"></input></td>
			<td>Email</td>
			<td><input name="email" class="easyui-validatebox" validType="email"></input></td>
		</tr>
	</table>
	<div style="padding:5px 0;text-align:right;padding-right:30px">
		<a href="#" class="easyui-linkbutton" iconCls="icon-save" plain="true" onclick="saveItem(<?php echo $_REQUEST['index'];?>)">Save</a>
		<a href="#" class="easyui-linkbutton" iconCls="icon-cancel" plain="true" onclick="cancelItem(<?php echo $_REQUEST['index'];?>)">Cancel</a>
	</div>
</form>

4단계: 편집 내용 저장 또는 취소

사용자를 저장하려면 'saveItem' 기능을 호출하고, 편집을 취소하려면 'cancelItem' 기능을 호출하세요.

function saveItem(index){
	var row = $('#dg').datagrid('getRows')[index];
	var url = row.isNewRecord ? 'save_user.php' : 'update_user.php?id='+row.id;
	$('#dg').datagrid('getRowDetail',index).find('form').form('submit',{
		url: url,
		onSubmit: function(){
			return $(this).form('validate');
		},
		success: function(data){
			data = eval('('+data+')');
			data.isNewRecord = false;
			$('#dg').datagrid('collapseRow',index);
			$('#dg').datagrid('updateRow',{
				index: index,
				row: data
			});
		}
	});
}

다시 게시할 URL을 결정한 다음 양식 개체를 찾고 'submit' 메서드를 호출하여 양식 데이터를 제출합니다. 데이터가 성공적으로 저장되면 행 데이터가 축소되고 업데이트됩니다.

function cancelItem(index){
	var row = $('#dg').datagrid('getRows')[index];
	if (row.isNewRecord){
		$('#dg').datagrid('deleteRow',index);
	} else {
		$('#dg').datagrid('collapseRow',index);
	}
}

편집 작업을 취소할 때 해당 줄이 새 줄이고 저장되지 않은 경우 해당 줄을 직접 삭제하고, 그렇지 않으면 줄을 축소하세요.

JQuery EasyUI 예제 다운로드

jeasyui-app-crud3.zip