2015-10-26 15 views
1

Я использую DataTables.Net JS component для рендеринга данных с сервера (перезагрузка выполняется по таймауту).Datatables.net ajax.reload(): не нужно восстанавливать DOM, если не нужно

Есть ли способ избежать перестройки <TR> s на ajax.reload(), если строки фактически не изменены? Я не хочу, чтобы мои пользовательские классы для <TR> s исчезли.

UPDATE

Вот как я инициализировать компонент:

myTable = $('#myTable').dataTable(
{ 
    'ajax': 
    { 
     'url': 'data', // Something like http://myserver/data 
     'dataSrc': '' // All data go right in the root of JSON. 
    } 
... 

Мои пользовательские классы, такие как .selected по «множественный выбор», например, на сайте DataTable.

Привет,

+0

Как вы инициализацию DataTable и добавить пользовательские классы к рядам в первую очередь .. ? – davidkonrad

+0

@davidkonrad Я обновил вопрос, пожалуйста, посмотрите. Спасибо. – noober

ответ

1

Unfortunetely DataTables стеклотара таблицы на каждый reload(). Поэтому исключить уже существующие строки в обратном вызове dataSrc было бы невозможно.

Но вы можете сами сделать AJAX и вставить новые строки «вручную», если они еще не существуют. Я предполагаю, что вы используете источник данных JSON, чтобы сравнить существующие строки с новыми строками, используя JSON.stringify.

Вот пример (включает в себя выбор) с помощью setInterval:

var table = $('#example').DataTable({ 
    select : true, 
    columns : [ 
    { "data" : "id" }, 
    { "data" : "name" }, 
    { "data" : "lat" }, 
    { "data" : "lon" }] 
}); 

function loadData() { 
    $.getJSON('https://api.myjson.com/bins/14t4g', function(json) { 
     function rowExists(item) { 
      for (var i=0;i<table.data().length;i++) { 
       if (JSON.stringify(table.row(i).data()) == JSON.stringify(item)) return true; 
      } 
      return false; 
     }  
     json.forEach(function(item) { 
      if (!rowExists(item)) { 
       table.row.add(item).draw(); 
      } else { 
       console.log('row already exists', item); 
      }  
     }) 
    }); 
}  

var test = setInterval(function() { 
    loadData() 
}, 1000); 

демо ->http://jsfiddle.net/qseeeu43/