如何访问数据表库单表中其他json对象的值?
Posted
技术标签:
【中文标题】如何访问数据表库单表中其他json对象的值?【英文标题】:How to access values of other json objects in single table of datatable library? 【发布时间】:2019-11-25 17:06:53 【问题描述】:我正在尝试使用数据表显示数据和查看/编辑/删除按钮。
我正在使用这样的两个对象获取用户数据和权限: ]
"data": [
"userid": "1",
"username": "John",
"email": "john@gmail.com",
"userrole": "SYSTEM VENDOR",
"isactive": "Y",
"activationstat": "deactivate",
"activationmsg": "Deactivate"
],
"perm":
"read": "y",
"edit": "y",
"delete": "n"
需要为每一行呈现按钮。数据表代码如下:
$('#dt-user').DataTable(
dom: 'lBfrtip',
buttons: [
extend: 'copyhtml5',
exportOptions:
columns: ':visible'
,
extend: 'csvHtml5',
exportOptions:
columns: ':visible'
,
extend: 'excelHtml5',
exportOptions:
columns: ':visible'
,
extend: 'pdfHtml5',
exportOptions:
columns: ':visible'
,
extend: 'print',
exportOptions:
columns: ':visible'
,
'colvis'
],
ajax: baseURL + 'user/list-user-aj',
columns: [
"data": "id",
render: function (data, type, row, meta)
return meta.row + meta.settings._iDisplayStart + 1;
,
data: 'username' ,
data: 'email' ,
data: 'userrole' ,
data: 'isactive'
],
responsive:
details: false
);
如何访问“perm”JSON 对象以检查其值以显示编辑、删除、打印等按钮?
【问题讨论】:
请把代码放在帖子里,不要截图。 您是否尝试在控制台中登录列回调的其他参数?喜欢console.log(data, type, row, meta)
?也许其中一些字段可能包含您需要的信息。
是的,我做到了。我只能访问用户信息(数据)。
欢迎来到 Stack Overflow。请提供一个最小的、可重复的示例:***.com/help/minimal-reproducible-example
【参考方案1】:
简短回答:您将无法在数据表初始化代码中获取“perm”对象。数据表初始化代码仅适用于 JSON 中的“数据”数组。
但是,对于您的情况,这里有两种可能的解决方案:
选项 1: 如果“perm”对象对 JSON 中“data”数组中的所有元素(用户)是通用的,如下所示:
"data": [
"userid": "1",
"username": "John",
"email": "john@gmail.com",
"userrole": "SYSTEM VENDOR",
"isactive": "Y",
"activationstat": "deactivate",
"activationmsg": "Deactivate"
,
"userid": "2",
"username": "John2",
"email": "john2@gmail.com",
"userrole": "SYSTEM VENDOR2",
"isactive": "Y",
"activationstat": "deactivate",
"activationmsg": "Deactivate"
<!-- and maybe some more objects-->
],
"perm":
"read": "y",
"edit": "y",
"delete": "n"
然后您可以访问 perm 对象,如下所示:(这将在 Datatables 定义之外)
var permissions;
userDatatable.on('xhr', function ()
var json = userDatatable.ajax.json();
var permissions = json.perm;
);
当您初始化 Datatables 时,userDatatable 将是全局 javascript 变量,如下所示:
var userDatatable = $('#dt-user').DataTable( //......and all your code
然后在你的列定义中,你可以像这样访问 perm 对象和渲染按钮:
columns:[
data:null,
"render": function(data, type, row, meta)
if(perm.delete === 'y')
return "<button class='deleteButton'> Delete </button>";
]
确保 javascript 变量“permissions”是全局的并且对您的 Datatables 初始化代码可见。这将为您提供删除按钮,但您必须编写额外的 Javascript/JQuery 代码来触发数据表编辑器的 AJAX 调用来删除行;无论是在后端还是从网格中。
选项 2:您可以修改服务器端代码以返回 JSON,使其在“data”数组的每个元素中都具有权限对象:
"data": [
"userid": "1",
"username": "John",
"email": "john@gmail.com",
"userrole": "SYSTEM VENDOR",
"isactive": "Y",
"activationstat": "deactivate",
"activationmsg": "Deactivate",
"perm":
"read": "y",
"edit": "y",
"delete": "n"
,
"userid": "2",
"username": "John2",
"email": "john2@gmail.com",
"userrole": "SYSTEM VENDOR2",
"isactive": "Y",
"activationstat": "deactivate",
"activationmsg": "Deactivate",
"perm":
"read": "y",
"edit": "y",
"delete": "n"
<!-- and maybe some more objects-->
]
使用第二个选项,您可以使用“row.perm.delete”属性在“render”函数中访问 perm 对象。
希望对您有所帮助!
【讨论】:
在选项 1 中,在设置权限变量数据表的值之前,必须初始化数据表,并且渲染列的代码也在初始化中。在这种情况下,有一个错误“权限”变量未声明。我将权限和 userDatatable 声明为全局。 (如果我先初始化表,然后初始化权限,销毁表,然后再次初始化数据表,它就可以工作)。 你是对的。只有在 Datatables AJAX 调用完成后,“权限”变量才可用。还有一种方法可以将 AJAX 调用与 Datatables 初始化代码分开。因此,您首先进行 AJAX 调用,将数据存储在 javascript 对象中,然后通过“data”选项将 javascript 对象的“data”部分作为数据提供给 Datatables。这样您就可以避免销毁表并重新初始化。 莫妮卡 L 非常感谢。有效。 (而且我已经停止使用数据表)。 :))))以上是关于如何访问数据表库单表中其他json对象的值?的主要内容,如果未能解决你的问题,请参考以下文章