2016-07-19 1 views
3

У меня проблема с DataTables, работающими вместе с Nette.DataTables и Nette; Освежающий фрагмент удаляет элементы Datatables

Мой JavaScript код:

$(document).ready(function(){ 
    $('.table').DataTables(); 
}); 

HTML Nette:

{snippet customers} 
    <table class="table table-hover" id="userTable"> 
    <thead> 
     <tr> 
     <th>Name</th> 
     <th>Country</th> 
     <th>Type</th> 
     </tr> 
    </thead>    
    <tbody> 
    {foreach $customers as $customer} 
    <tr> 
     <td> 
      <a href="{$presenter->link(':Customers:show', array('id' => $customer->id))}" target="_blank"> 
      {$customer->name} 
      </a> 
      </td> 
      <td>{$customer->country}</td> 
      <td>{$customer->type}</td>  
     </tr> 
     {/foreach} 
    </tbody> 
    </table> 
{/snippet} 

Это нормально работает, но когда фрагмент Nette обновляется, DataTables элементы (страницы, порядок и т.д.) будут удалены. Если страница обновлена, эти элементы возвращаются. Я использую Nette Framework 2.3 и Doctrine 2.

ответ

3

DataTable создан из HTML на событии $(document).ready(), которое происходит, когда страница загружается. Если вы обновите фрагмент без обновления веб-страницы, DataTable будет потерян, и он не будет воссоздан, так как это событие еще не было запущено. Что вам нужно сделать, это добавить новый вызов $('.table').DataTables(); в конце кода, который обрабатывает обновление фрагмента (я не знаком с nette, поэтому я не уверен точно, где это произойдет).

+0

Да, я попробовал его и он работает, но я хотел бы, если добавить новую строку в таблицу и воссозданной DataTables, Следует помнить, мой выбор, который установлен (вкл. Набор страницы) – ondrusu

+0

@ondrusu Этот вопрос с тем, что вы создаете DataTable из таблицы HTML, а затем обновляете таблицу HTML. Если бы вы использовали AJAX для поиска ваших данных, это было бы легко сделать, но поскольку DataTables получает ваши данные из HTML, вы не сможете добавить новую строку в DataTables и обновить HTML. Вам нужно будет добавить строки непосредственно в HTML, что означает, что вы не можете использовать метод DataDables '.add()' для добавления строк. –

+0

OK большое спасибо. Это правда, может быть, это новый вопрос, но какой плагин я бы использовал для «DataGrid» - сортировка, подкачка, мой фильтр для Nette и Doctrine 2? Я нашел [сетку данных] (http://grid.mesour.com/version2/basic/without-settings/). – ondrusu