DataTables实现增删改查(1.10版本)

这段时间项目需要做个APP的管理后台,运维人员用的,简单的增删改查,于是想到了dataTable,下面简单记录下个人在使用过程中的一些难点,顺带一些没有解决的问题,将随着项目的进展,慢慢解决。

先看一下插件的页面效果:

[img]http://dl2.iteye.com/upload/attachment/0117/4531/228b4f44-df7f-3361-88a1-922bc06922b8.png[/img]

对于一款前端插件,要考虑这样一个问题,相比不用插件和其他插件,这款插件的优势值不值得自己花精力去学习并掌握这个插件。

如果仅仅作为表格的载体,其实有很多插件可以选择。我更看重的是它的编辑功能,后台为维护更多的是对单跳数据进行操作,具体场景是客服和客户1V1的交流,而dataTables对于单条数据的编辑,是相当不错的,具体来说,采用bootstrap的模态窗口(插件自动生成)实现了修改功能。对于开发人员来说,省去了另写编辑页面的繁琐。

话不多说,下面慢慢粘代码以及效果图。

对于一个和后台交互的插件,最重要其实就两件事情,需要什么样的数据格式,提交给后台的又是怎样的数据格式,搞清楚这两点,其实就没什么了。

dataTables支持很多数据源,官方有详细介绍,项目采用了轻量级的json数据进行传输,以下是插件填充表格时所需的数据格式:

[img]http://dl2.iteye.com/upload/attachment/0117/4533/9c296764-aea2-396b-827d-6c0c49f4cc22.png[/img]


对于增删改查,dataTable默认传给后台的数据相当蛋疼,这里费了不少心思,最后重新封装了下数据格式,先看一下默认的数据格式:

[img]http://dl2.iteye.com/upload/attachment/0117/4535/5706d267-b3e3-3483-b4d5-110861f4ec37.png[/img]

想要看懂上面的数据,还需要知道一个知识点,如果想使用dataTables的编辑功能,返回数据中,需要包括"DT_RowId"这个键,这个键值对需要放在每一行的数据中,充当表格的主键,当然,重复也没关系,这就是让人困惑的地方;

有了这个知识点,在看编辑数据时,默认的数据格式,这些都是键值对,对于键的命名,action表示操作行为,包括remove,edit,create三种键值,支持自定义,详细的可以参考官方文档;剩下的便是每个单元格的表示,“data[row1][accountId]”中,data是固定的,row1是选中行DT_RowId的值,accountId是选中行列的别称,关于列名和json数据源键名的匹配,以下会有详细代码。

看懂这个之后,再去思考后台如何拿数据,后台不可能去遍历request中的所有参数,所以比较好的方法就是在前台二次封装这些数据,通过对json数据的重新封装,即可,以下是个人的封装方法:

ajax: {
url:"/charge-manage/individualMember/edit",
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);
}
return result;
},
},


经过这样的封装,参数类型如下:

[img]http://dl2.iteye.com/upload/attachment/0117/4537/b317e55f-1184-3f4d-b426-e5d3ae78b033.png[/img]


这样后台就方便拿参数进行操作了。

解决了数据流向问题,在看页面本身的问题,表格列名如何与数据源匹配,这个比较简单,代码如下:

$('#member').DataTable( {
dom: "Bfrtip",
ajax:"/charge-manage/individualMember/getMember?"+"phoneNum="+phoneNum,
columns:[{data:"memberCode"},
{data:"accountId"},
{data:"phoneNum"},
{data:"password"},
{data:"lastLoginTime"}
],
select:true,
buttons: [
{ extend: "create", editor: editor },
{ extend: "edit", editor: editor },
{ extend: "remove", editor: editor }]
} );


columns集合中的顺序,对应表格列的顺序,data的值,对应json数据源中的键;
以下是表格的实际图形:

编辑操作有自己的操作对象,也就是上面buttons栏引用的,代码如下:

var editor = new $.fn.dataTable.Editor( {
ajax: {
url:"/charge-manage/individualMember/edit",
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);
}
return result;
},
},

fields: [{
label: "会员编码:",
name: "memberCode"
}, {
label: "账户编码:",
name: "accountId"
},{
label: "手机号:",
name: "phoneNum"
},{
label: "密码:",
name: "password"
},{
label: "最后登录时间:",
name: "lastLoginTime"
}],
table: "#member"
});


fields集合中,label值是模态窗口对应的名称,细心的同学可以看到加了冒号,name对应向后台传入参数的键名。
下面是该模态的实际图片,再次强调,这玩意是自动生成的!
[img]http://dl2.iteye.com/upload/attachment/0117/4529/e42d399f-d36a-3d2e-a4e9-0c93c4b23c6a.png[/img]


当然第一次使用,自然有相当多的问题还没有解决,欢迎玩过的同学过来指教。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值