2015-06-01 1 views
0

Я хочу, когда я изменю состояние таблицы (пример: количество строк на странице), это изменение записывается и применяется ко всем таблицам. Я пробовал с stateSave: true, но он сохраняется только для таблицы, в которой я внес изменения.jQuery DataTables: сохранение одного и того же состояния для нескольких таблиц

$('#currentTab').dataTable({ 
    "order": [[0, "desc"]], 
    stateSave: true 
}); 

$('#twoWaveTab').dataTable({ 
    "order": [[0, "desc"]], 
    stateSave: true 
}); 

$('#EvolTab').dataTable({ 
    "order": [[0, "desc"]], 
    stateSave: true 
}); 

Как сохранить одно и то же состояние для таблицы и в то же время для других общих таблиц?

ответ

0

Возможно использование stateSaveParams событий и state.save() Метод API.

Нет прямого способа скопировать состояние одной таблицы в другую, вам нужно установить каждое свойство состояния индивидуально. Приведенный ниже код копирует только длину страницы из одной таблицы в другую с помощью $(this).DataTable().page.len(data.length).

Вам нужно заменить example1, example2 и example3 с идентификаторами таблиц (currentTab, twoWaveTab и EvolTab).

var table1 = $('#example1').DataTable({ 
    "order": [[0, "desc"]], 
    stateSave: true 
}); 

var table2 = $('#example2').DataTable({ 
    "order": [[0, "desc"]], 
    stateSave: true 
}); 

var table3 = $('#example3').DataTable({ 
    "order": [[0, "desc"]], 
    stateSave: true 
}); 

var is_save_in_progress = false; 
var $tables = $('#example1, #example2, #example3'); 
$tables 
    .on('stateSaveParams.dt', function (e, settings, data){ 
     // Save DOM element 
     var that = this; 

     // If state saving is not in progress 
     if(!is_save_in_progress){ 
     is_save_in_progress = true; 

     // Iterate over all tables 
     $tables.each(function(index){ 

      // If table is other than the initial table 
      if(this.id !== that.id){ 

       // Set page length, save state and redraw the table 
       $(this).DataTable() 
        .page.len(data.length) 
        .state.save() 
        .draw(false); 
      }   
     }); 

     // Indicate that state saving is over 
     is_save_in_progress = false; 
     }    
    }); 

См. this JSFiddle для демонстрации.

+0

У меня возникла проблема при копировании этого кода: ошибка: Uncaught TypeError: Не удается прочитать свойство 'len' undefined –

+0

@YoussefMayoufi, см. [JSFiddle] (http://jsfiddle.net/d32j6bLe/1/) для демонстрация рабочего кода. Измените этот JSFiddle или дайте ссылку на страницу, на которой вы работаете, чтобы проиллюстрировать ошибку, которую вы получаете. –

+0

Я думаю, что проблема в том, что я использую этот плагин в контроллере angularjs, поэтому без загрузки страницы! как я могу решить эту проблему :( –