0

我有一个作为 Jquery 数据表运行的表。我有以下要求

当用户对列进行排序时

  1. 我需要识别列
  2. 根据这个排序列,我想从另一个对用户不可见的列中获取一个值
  3. 有了这个值,我想更新表中的第一列。这是一个可见的列

根据http://datatables.net/release-datatables/examples/advanced_init/dt_events.html上的示例,我使用名为 eventFired 的函数将排序事件绑定到表

我能得到的最好的结果如下

 function eventFired( type ) {     
          var oTable = $('#tabOverlayLeagueTable').dataTable(); //select table
          var oSettings = oTable.fnSettings(); //get settings
          var sortByindex = oSettings.aaSorting[0][0];//get index of sort column
          //var nNodes = oTable.fnGetNodes( ); // I am not sure if I should use this 
          var data = oTable.fnGetData( ); // I get the data from this call

          // loop then data rows
           for (var i = 0; i < data.length; i++) {

               // update the first column in the table
              // with a specific column (this is a hidden column). In 
              //example its cashiers rank figure
              oTable.fnUpdate( data[i].CashierRank, i, 0);
          }             
 } 

问题

  1. 这可能不是解决我的问题的最佳方式
  2. data[i].CashierRank我会按索引而不是名称来获取列
  3. 代码不起作用。似乎永远循环!
4

1 回答 1

0

我希望这个对你有用

问题1:直观地说,当您完成所有数据修改时,最好更新整个表,只需一次。

问题2: 可以通过索引访问列描述来获取属性名称:

var colName = oSettings.aoColumns[sortByindex].mData

问题3: 这很奇怪。这是一个简单的for,所以......当你说它永远循环时,你的意思是索引趋向于无限,而不是在长度上停止?我认为您可能在每次表进行渲染时都在执行此函数,或者当您更新这些列时,表认为它正在排序。在这种情况下,您将创建一个无限循环,因为您在 for(使用 fnUpdate)中调用渲染,并在更改所有值后更新整个表,如我在 1 中所说。它应该得到解决。

于 2013-07-26T12:13:10.857 回答