jQuery EasyUI 应用 – 创建展开行明细编辑表单的 CRUD 应用
当切换数据网格视图(datagrid view)到 \’detailview\’,用户可以展开一行来显示一些行的明细在行下面。这个功能允许您为防止在明细行面板(panel)中的编辑表单(form)提供一些合适的布局(layout)。在本教程中,我们使用数据网格(datagrid)组件来减小编辑表单(form)所占据空间。

步骤 1:在 HTML 标签中定义数据网格(DataGrid)
<table 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> <a href=\"#\" iconCls=\"icon-add\" plain=\"true\" onclick=\"newItem()\">New</a> <a href=\"#\" iconCls=\"icon-remove\" plain=\"true\" onclick=\"destroyItem()\">Destroy</a> </div>
步骤 2:为数据网格(DataGrid)应用明细视图
$(\'#dg\').datagrid({
view: detailview,
detailFormatter:function(index,row){
return \'<div></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\’ 函数来生成行明细内容。
在这种情况下,我们返回一个用于放置编辑表单(form)的空的 <div>。
当用户点击行展开按钮(\’+\’)时,\’onExpandRow\’ 事件将被触发,我们将通过 ajax 加载编辑表单(form)。
调用 \’getRowDetail\’ 方法来得到行明细容器,所以我们能查找到行明细面板(panel)。
在行明细中创建面板(panel),加载从 \’show_form.php\’ 返回的编辑表单(form)。
步骤 3:创建编辑表单(Form)
编辑表单(form)是从服务器加载的。
show_form.php
<form method=\"post\"> <table style=\"width:100%;background:#fafafa;padding:5px;margin-top:5px;\"> <tr> <td>First Name</td> <td><input name=\"firstname\" required=\"true\"></input></td> <td>Last Name</td> <td><input name=\"lastname\" required=\"true\"></input></td> </tr> <tr> <td>Phone</td> <td><input name=\"phone\"></input></td> <td>Email</td> <td><input name=\"email\" validType=\"email\"></input></td> </tr> </table> <div style=\"padding:5px 0;text-align:right;padding-right:30px\"> <a href=\"#\" iconCls=\"icon-save\" plain=\"true\" onclick=\"saveItem(<?php echo $_REQUEST[\'index\'];?>)\">Save</a> <a href=\"#\" 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,然后查找表单(form)对象,并调用 \’submit\’ 方法来提交表单(form)数据。当保存数据成功时,折叠并更新行数据。
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
点我分享笔记