在使用layui数据表格的时候,遇到了一个问题,后端传回的数据,在前端不显示。
刚开始的时候是一直报错:
layui table 返回的数据不符合规范,正确的成功状态码应为:"code": 0
经过一番搜查修改之后,是无数据
结果如下
然后又修改了一下成为下面这种了:
我的代码如下
html
<div>
<table id="usertable" lay-filter = "test"></table>
</div>
js
layui.use('table', function(){
var table = layui.table;
table.render({
elem: '#usertable'
,height: 312
, url: '{% url "getsysuser0" %}' // 数据接口
, page: true
, cols: [[
{field: 'user_id', title:'用户编号',width:120, sort:true, fixed:'left'}
,{field: 'account', title:'账号',width:100,sort:true}
,{field: 'password', title:'密码',width:100}
,{field: 'nickname', title:'昵称',width:120}
,{field: 'age', title:'年龄',width:80,sort:true}
,{field: 'gender', title:'性别',width:80}
,{field: 'phone', title:'电话',width:100}
,{field: 'email', title:'邮箱',width:100}
,{field: 'addtime', title:'添加时间',width:150}
]]
, parseData:function(res){
console.log(res)
return {
"code": 0,
"msg":"",
"count":res.count,
"data":res.users
}
}
});
});
后端代码
@csrf_exempt
def getSysUser0(request):
# 获取普通用户
users = Sysusers.objects.filter(type__exact = 0)
sysusers = serializers.serialize("json",users,ensure_ascii=False)
sysusers = json.loads(sysusers)
data = {
"users":sysusers,
"count":len(users)
}
return JsonResponse(data,safe=False,json_dumps_params={'ensure_ascii': False})
users: [{
account: '',
addtime: '',
age: "",
// 其余字段省略
}]
这个item是不是多余了?
解决方法:
根据代码和参考资料,可以看到以下几种解决方法:
在 table.js 中,修改 F.prototype.reload 函数,添加如下代码:i.config.where = {},并且在 e = e || {} 上面添加这一行代码。这个操作可以解决在翻页的时候数据无法被识别的问题。
在 table.render 中,增加一个 done 回调函数,用于处理表格数据。具体代码如下:
table.render({
elem: '#test',
url: 'test',
cols: [[
// 填写表头参数
]],
done: function(res, curr, count){
this.where={};
}
});
这个操作可以解决在渲染表格时无法显示从后台传回的数据的问题。
可以在 table.js 中的 F.prototype.renderData 函数中修改代码,添加以下内容:
if (options.cacheCheck) {
let cacheCheckData=table.cacheCheck[that.key]||{};
return cacheCheckData[item1[options.checkKey]]?'checked':''
}
这个操作可以解决翻页后复选框数据无法显示的问题。
例如:
table.reload('tabelReload', {
where: {
'bdate': datebegin,
'edate': dateend
},
page: {
curr: 1 // 重新从第1页开始
}
});
这个操作可以解决在前台使用单选框时表格顺序的问题。
由于官方 text 属性的支持范围有限,无法满足需求,可以通过自定义的方式实现单元格编辑,例如需要添加弹窗、下拉、时间选择器等内容。具体实现可以自行扩展。
以上几种方法都可以解决在使用 layui table 时遇到的一些问题,具体根据问题选择相应的解决方案即可。