使用DataTables识别已过滤的行

时间:2012-11-01 15:26:42

标签: javascript datatables

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

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

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',否则第3行几乎没用。这是因为当设置为'false'时,HTML元素实际上不存在于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 - 我已根据各种调查结果在下面添加了答案!

1 个答案:

答案 0 :(得分:0)

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

使用我在此SO page上找到的JavaScript对象检查(通过'goreSplatter')我能够转储各种DataTables对象。

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

从'fnRowCallback()'函数,我做了相同的对象检查,试图找到我初始化'ID'的初始'rowData'。我发现如下:

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

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

当我使用过滤器时会出现问题!出于某种原因,'rowData.ID'似乎始终为'0'。似乎DataTables获取了对象的副本,但没有设置任何它不知道的属性,从而导致'0'。

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

我稍后会报告任何进一步的调查结果。