2016-04-06 3 views
0

У меня есть данные, которые получают данные из источника ajax, в настоящее время он упорядочен по столбцу 4 по убыванию. Однако у меня есть массив данных, который я бы хотел заказать в таблице, на которой не существует столбца.Datatables 1.10 Заказ по массиву данных

oTable = $('#Table').DataTable({ 
        "scrollX": true, 
        stateSave: false, 
        "processing": true, 
        "serverSide": false, 
        "ajax": "scripts/SSP_enquiry.php", 
        select: true, 
        colReorder: true, 
        "columnDefs": [ 
         { 
          "visible": false, 
          "searchable": false, 
          "targets": [9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27] 
         }, 

         {className: "word", "targets": [1]} 


        ], 


        order: [4, 'desc'], 
        dom: '<"top">lrt<"bottom"pB><"clear">', 
        responsive: false, 
        buttons: [ 
         'excel' 
        ] 


       }); 

Моя функция, которая использует Moment.JS сделать сравнение между датами в таблице (которые существуют в колонке 4) и дата сегодняшнего. Затем он толкает разницу в днях в массив с именем dArray.

В моем массиве есть индекс для каждого значения, которое должно относиться к строке в таблице.

Так что я хочу сделать, это использовать индекс и значение для сортировки текущей таблицы на основе значений в dArray

function dateGet() { 

       var idx = oTable 
        .columns(4) 
        .data() 
        .eq(0);// Reduce the 2D array into a 1D array of data 
       //console.log(idx); 

       var dArray = []; 
       var today = moment(); 

       $.each(idx, function(index,value) { 
        var tempDate = moment(value); 
        var deadlineDiff = tempDate.diff(today, 'days'); 
        dArray.push(index,deadlineDiff); 
        console.log(dArray); 
       }) 
      } 

Пробу dArray

[0, 6] 
[1, 0] 
[2, -0] 
[3, -0] 
[4, -1] 
[5, -6] 
[6, -7] 
[7, -7] 
[8, -11] 
[9, -12] 
[10, -12] 
[11, -12] 
[12, -13] 

UPDATE

Я добавил новый столбец, значение которого по умолчанию равно 0, поэтому мне теперь нужно назначить значения ba sed в массиве значений разности сроков. Они должны соответствовать идентификатору соответствующей строки.

result[j][0] даст мне удостоверение личности в массиве result[j][1] даст мне значение разности в массиве

function dateGet() { 

      var dArray = []; 
      var today = moment(); 
      var ID = oTable 
       .columns(0) 
       .data() 
       .eq(0); 
      var dDate = oTable 
       .columns(4) 
       .data() 
       .eq(0);// Reduce the 2D array into a 1D array of data 


      $.each(dDate, function (index, value) { 

       var tempDate = moment(value); 
       var deadlineDiff = Math.abs(tempDate.diff(today, 'days')); 
       dArray.push(deadlineDiff); 

      }); 

      var result = $.map(ID, function (el, idx) { 
       return [[el, dArray[idx]]]; 
      }); 

      oTable.rows().every(function (rowIdx, tableLoop, rowLoop) { 
       var data = this.data(); 

       for (var j = 0; j < result.length; j++) { 

        if (data[0] == result[j][0]) { 
//in here the ID in the table and the ID in the array 
// match, I need to iterate through rows and assign the value 
//in the array to column 28's cell 
        } 


       } 


      }); 
     } 
+1

Как в предположении ... в функции рендеринга для столбца 4 вы можете добавить атрибут данных в диапазон, который содержит вашу дату? А потом заказывайте на этом, а не на самой дате? – annoyingmouse

+0

hmmm, поэтому вы предлагаете, добавляете значения в массив к соответствующему индексу строки/столбца, а затем сортируете атрибут данных. Я понятия не имею, могу ли я это сделать, есть ли у вас пример? –

+0

@annoyingmouse прав, еще лучше - просто верните значение массива, когда 'render()' метод хочет значение 'sort' или' filter'. – davidkonrad

ответ

1

Что-то, как это должно делать то, что вам нужно (при условии, что вы хотите, чтобы разница работать независимо от того, отрицательный или положительный:

$(function() { 
    var example = $("#example").DataTable({ 
     columns: [{ 
      "title": "Released Date", 
      "type": "int-diff", 
      "render": function(d){ 
       var diff = Math.abs(moment().diff(moment(d, "DD/MM/YYYY"), 'days')); 
       return $("<span></span>",{ 
        "text": d + " (" + diff + ")", 
        "data-diff": diff 
       }).prop("outerHTML"); 
      } 
     }] 
    }); 
}); 

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "int-diff-pre": function(a) { 
     return ~~$(a).data("diff"); 
    }, 
    "int-diff-asc": function(a, b) { 
     return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }, 
    "int-diff-desc": function(a, b) { 
     return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    } 
}); 

Учитывая таблицу, как это:

<table id="example"> 
    <thead> 
     <tr> 
      <th>Date</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>01/04/2016</td> 
     </tr> 
     <tr> 
      <td>02/04/2016</td> 
     </tr> 
     <tr> 
      <td>03/04/2016</td> 
     </tr> 
     <tr> 
      <td>04/04/2016</td> 
     </tr> 
     <tr> 
      <td>05/04/2016</td> 
     </tr> 
     <tr> 
      <td>06/04/2016</td> 
     </tr> 
     <tr> 
      <td>07/04/2016</td> 
     </tr> 
     <tr> 
      <td>08/04/2016</td> 
     </tr> 
     <tr> 
      <td>09/04/2016</td> 
     </tr> 
     <tr> 
      <td>10/04/2016</td> 
     </tr> 
     <tr> 
      <td>11/04/2016</td> 
     </tr> 
     <tr> 
      <td>12/04/2016</td> 
     </tr> 
     <tr> 
      <td>13/04/2016</td> 
     </tr> 
     <tr> 
      <td>14/04/2016</td> 
     </tr> 
    </tbody> 
</table> 

JSFiddle. В основном мы делаем разницу между датой сегодня и датой в ячейке как положительное целое число в диапазоне как атрибут данных с датой содержимого диапазона. Затем мы используем атрибут data для сортировки, а не для содержимого диапазона.

Надеюсь, что это поможет.

+0

Я вижу, что вы сделали, у меня есть 28 столбцов, которые требуют, чтобы columnDefs устанавливал классы/видимость и т. Д. Я немного изменил структуру, так что у меня есть дополнительный столбец с именем deadlineDateDifference. изначально установлено значение 0. Im, проходящий через каждую строку, проверяя, совпадает ли идентификатор строки с ID в моем массиве, все, что мне нужно сейчас, - это способ настроить данные этой строки и столбца 28, чтобы изменить его на значение в массиве Ill update с помощью код. –

+0

Отлично, рад, что это помогло. – annoyingmouse

+0

Я не думаю, что вы знаете, как я могу достичь вышеуказанного, используя дополнительный код, который я поставил? Так что столбец также сортируется? –

Смежные вопросы