DataTables - 选择插件 - 带分页的多行选择无法记住选择

时间:2015-10-25 10:10:41

标签: coffeescript datatables

我需要确保我可以使用DataTables,1.10来使用Select插件 - 分页设置但是当使用服务器端处理时所选项目消失了,我可以看到几十个引用和黑客,但是感觉很好某个人干净地解决了这个问题

我希望能够记住分页中选定的行。

下面的咖啡脚本:

    $('#users-table').dataTable
      processing: true
      serverSide: true
      select: true
      rowId: 'row_id'
      deferRender: true
      ajax: $('#users-table').data('source')
      pagingType: 'full_numbers'
      columns: [
        { data: 'name' }
        { data: 'phone' }
        { data: 'address' }
      ]

任何明显的解决方案?

1 个答案:

答案 0 :(得分:1)

定义rowId后,您可以将所选行的id存储在数组select中。在每次绘制时,循环浏览页面的可见行并重新选择之前已选择的任何行:

select = []

# row is selected, add to array
table.on 'select', (e, dt, type, indexes) ->
  rowId = table.row(indexes[0]).id()
  if ! ~select.indexOf(rowId)
    select.push rowId
  return

# row is deselected, remove from array
table.on 'deselect', (e, dt, type, indexes) ->
  rowId = table.row(indexes[0]).id()
  index = select.indexOf(rowId)
  if index > -1
    select.splice index, 1
  return

# on each draw, cycle trough visible rows
# re-select rows if their id appears in the select array 
table.on 'draw', ->
  table.rows().every (rowIdx, tableLoop, rowLoop) ->
    if ~select.indexOf(@id())
      @select()
    return
  return

希望它也适用于咖啡脚本。使用 http://js2.coffee/

翻译了javascript

多选:

table.on 'select', (e, dt, type, indexes) ->
  indexes.forEach (id) ->
    rowId = table.row(id).id()
    if ! ~select.indexOf(rowId)
      select.push rowId
    return
  return

table.on 'deselect', (e, dt, type, indexes) ->
  indexes.forEach (id) ->
    rowId = table.row(id).id()
    index = select.indexOf(rowId)
    if index > -1
      select.splice index, 1
    return
  return