關於Datatables editor 的使用細節以及資料格式(第一次部落格,希望對有需要的人有幫助)
阿新 • • 發佈:2019-01-10
最近因為公司專案要做一個可編輯表格,我採用的是bootstrap的前端框架,使用打datatable editor來實現這個功能。下面具體寫開發過程以及問題:
首先你應該找相關資源:資料地址
效果圖:
可以實現單個表格編輯。然後下拉到頁面最後找到下面目錄:
選擇inline editing的例子可以實現行內編輯:這裡我選擇的是 inline editing with a submit button
然後關注點在於下面的例子內容了:
引入javascript相關的js、css(注意這裡的editor的js是有lisence,所以需要自己再找資料下載),然後看看Ajax load裡面的資料格式,你的datatable初始化資料需要安照
datatable要求的格式,這裡選擇json。Ajax data的資料是指你編輯後後臺返回給前端js的資料格式(非常重要!!!)
下面直接上程式碼:
$(document).ready(function() { editor = new $.fn.dataTable.Editor( { ajax: { create: { type: 'POST', url: 'http://localhost:8080/task-management/doSavePriority', data:function(data){ var result={}; for(var i in data.data){ var result=data.data[i]; result.DT_RowId=i; result.action=data.action; console.log(result.toString()); } return result; }, }, edit: { type: 'POST', url: 'http://localhost:8080/task-management/Updatapriority', data:function(data){ var result={}; for(var i in data.data){ var result=data.data[i]; result.action=data.action; result.DT_RowId=i; result.priorityId=i; console.log(result); } return result; }, }, remove: { url: 'http://localhost:8080/task-management/doDeletePriority', data:function(data){ var result={}; for(var i in data.data){ var result=data.data[i]; result.action=data.action; result.priorityId=i; console.log(result); } return result; }, } }, table: "#example", idSrc: 'priorityId', fields: [ { label: "priorityId:", name: "priorityId" }, { label: "priorityName:", name: "priorityName" }, ] } ); // Activate an inline edit on click of a table cell $('#example').on( 'click', 'tbody td:not(:first-child)', function (e) { editor.inline( this,{ buttons: { label: '>', fn: function () { this.submit(); } } } ); } ); $('#example').DataTable( { dom: "Bfrtip", ajax: "http://localhost:8080/task-management/TaskPriotiry", order: [[ 1, 'asc' ]], columns: [ { data: null, defaultContent: '', className: 'select-checkbox', orderable: false }, { data: "priorityId" ,className: 'editable'}, { data: "priorityName",className: 'editable' } ], select: { style: 'os', selector: 'td:first-child' }, buttons: [ { extend: "create", editor: editor }, { extend: "edit", editor: editor }, { extend: "remove", editor: editor } ] } ); } );
這裡我把ajax自定義為三個,create、edit、和delete對應上面三個按鈕,data是自己在前端對返回給後臺的資料進行二次封裝的,使之能與後臺接受的資料格式匹配(資料不匹配報400錯誤)
注意例子裡面沒有idSrc: 'priorityId',這一項他預設的是idSrc: "DT_RowId",
這個相當於datatable的主鍵,這裡我們把主鍵改為我們自己表裡的id。這在我們上傳資料時方便多了
只需要上傳相關表的實體類轉換的json(
ApiResponse<Object>().responseSuccess(list)
),不用再去繫結這個列。
後臺程式碼:
@Autowired
TaskPriorityDAO dao;
@RequestMapping("/TaskPriotiry")
@ResponseBody
public ApiResponse<Object> find() {
Priority i=new Priority();
List<Priority> list=i.selectAll();
System.out.println("list====="+list);
return new ApiResponse<Object>().responseSuccess(list);
}
@RequestMapping("/doSavePriority")
@ResponseBody
public ApiResponse<Object> doSavePriority(Priority p){
p.insert();
return new ApiResponse<Object>().responseSuccess(new Priority[]{p});
}
/*修改*/
@RequestMapping("/Updatapriority")
@ResponseBody
public ApiResponse<Object> priorityUpdata(Priority p){
System.out.println(p);
p.update(new EntityWrapper<Projects>().eq("priority_id",p.getPriorityId()));
return new ApiResponse<Object>().responseSuccess(new Priority[]{p});
}
/*刪除*/
@RequestMapping("/doDeletePriority")
@ResponseBody
public ApiResponse<Object> deletePriority(Priority p){
System.out.println(p);
//ps.deleteOneProject(projectId);
p.delete(new EntityWrapper<Projects>().eq("priority_id",p.getPriorityId()));
return new ApiResponse<Object>().responseSuccess(new Priority[]{});
}
!!!記得:一點要在編輯後後臺傳送到datatable前端的資料格式:
{
"data"
: [
{
"DT_RowId"
:
"row_37"
,
"first_name"
:
"f'f"
,
"last_name"
:
"方法"
,
"phone"
:
"發"
,
"city"
:
"f'f"
,
"image"
:
null
}
]
}
大概使用就是這些,具體遇到的問題及解決過程思路會在後續貼出。
注意:datatable editor是免費使用15天的,現在新版本無法破解(暫時找不到方法)。希望不要用它了。後續我會把我自己做的程式碼po出來,基本能代替他的功能。