0

我继承的一个使用 DataTables 的项目及其过滤器功能存在一些问题。

问题是在填充表格的主函数中,它具有以下代码:

var rowPos = mainTable.fnAddData(tableData, false)[0];
var rowData = mainTable.fnSettings().aoData[rowPos];

$(rowData.nTr).attr("id", "UID" + id); // Since the id doesn't always match the row

rowData.ID = id;

现在我知道第三行几乎没有用,除非 fnAddData 的“false”参数设置为“true”。这是因为 HTML 元素在设置为 'false' 时实际上并不存在于 DOM 中,因此无法设置 'id' 属性。

我不能使用'true',因为当向表格添加数百行时,它将在大约 4 秒内呈现表格。但是当我使用“假”时,它几乎会立即呈现表格(不到一秒)。所以在 'fnAddData()' 中使用 'true' 标志甚至不是一个选项。

我看到最后一行似乎在做某事,但我试图在 DataTables 网站上找到相关文档,但似乎找不到任何有价值的东西。我假设它允许某人将 UID(唯一记录 ID)绑定到实际的行号,这是想要的。

我的代码还使用了“fnRowCallback”,此时它尝试设置“id”属性,例如:

var id = mainTable.fnSettings().aoData[tablePos].ID;
$(row).attr("id", "UID" + id); // Since the id doesn't always match the row

主要问题是它似乎不起作用!如果我应用表过滤器并有意过滤掉除应为“UID”3 的记录之外的所有记录,在“fnRowCallback”中,我的“id”变量设置为 0。因此属性集始终为“UID0”并导致各种不好的参考。

有没有办法将我的数据库记录 ID 正确分配给表行?然后稍后再引用它们,例如在“fnRowCallback”函数中?还是有人设法弄清楚了其他一些技巧?

提前感谢您的时间和回复!

更新:2012.11.01 12:33 - 我已经根据迄今为止的各种发现在下面添加了一个答案!

4

1 回答 1

0

我一直在做一些挖掘,到目前为止,这是我的结论......

使用我在这个 SO页面上找到的 JavaScript 对象检查(通过“goreSplatter”),我能够转储各种 DataTables 对象。

正如预期的那样,我意识到我的“rowData”对象是一个小容器。并意识到“rowData.ID”属性最初并不存在于这个数据结构中。我猜应用程序开发人员自己插入了它,这是有道理的。

从“fnRowCallback()”函数中,我进行了相同的对象检查,试图找到我初始化“ID”的初始“rowData”。我发现它如下:

var rowData = mainTable.fnSettings().aoData[tablePos];

当我转储“rowData.ID”的值时,我意识到我的“ID”值已按预期正确设置。

当我做过滤器时会出现问题!由于某种原因,“rowData.ID”似乎总是“0”。似乎 DataTables 获取了对象的副本,但没有设置任何它不知道的属性,因此结果为“0”。

所以这绝对是一个错误(至少在我看来)!我将联系 DataTables 人员,了解他们希望用户如何将自定义应用程序数据绑定到他们的行,并查看他们是否也可以在过滤过程中设置这些属性。

稍后我将报告任何进一步的发现。

于 2012-11-01T16:46:43.573 回答