我有一个数据表,其子行由以下函数填充:
$('#myDataTable tbody').on('click', 'td.details-control', function () {
console.log(table.row(this).data());
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown())
{
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
}
});
格式化功能:
function format(d) {
// `d` is the original data object for the row
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">' +
'<tr>'+
'<td><strong>BLABLA1</td>' +
'<td align="center">'+
d.BLABLA1 +
'</td>'+
'<td><strong>BLABLA2</td>' +
'<td align="center">'+
d.BLABLA2+
'</td>'+
'</tr>' +
'</table>';
}
但是,当我显示页面并展开子行时,列的值是&#34;未定义&#34; ...
数据表中的行从模型(使用MVC 4)填充,如下所示:
<tbody>
@foreach (var item in Model)
{
<tr>
<td align="center">
@Html.DisplayFor(modelItem => item.BLABLA3)
</td>
.....</tr>}
</tbody>
我想我错过了将row.data()加载到格式化函数中的方法....这样做的正确方法是什么?我已经检查了所有的文件,他们都使用我试过的......
答案 0 :(得分:1)
是的,页面https://datatables.net/examples/api/row_details.html解释了我们必须写的内容,这很奇怪:
'<td>'+d.myrow+'</td>'+
但是,如果我这样做,则行的值为“未定义”,所以我必须写:
'<td>'+d["myrow"]+'</td>'+
而且有效!
答案 1 :(得分:0)
显然我必须为每一行选择.data()返回的对象/数组的索引,以下代码对我有用.....(用子行的整数索引替换KNOWN_INDEX ...)
<tr>'+
'<td><strong>BLABLA1</td>' +
'<td align="center">'+
d[KNOWN_INDEX]+
'</td>'+
.
.
.
'</tr>'+