2016-07-19 16 views
3

Netteと連携して動作するDataTableに問題があります。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スニペットが更新されたとき、DataTableの要素(ページ、順序など)が削除されます。ページがリフレッシュされると、これらの要素が返されます。 Nette Framework 2.3とDoctrine 2を使用しています。

答えて

3

DataTableは、ページがロードされるときに発生する$(document).ready()イベントのHTMLから作成されます。 Webページを更新せずにスニペットを更新すると、DataTableは失われ、そのイベントが再度トリガーされないため再作成されません。あなたがする必要があるのは、スニペットのリフレッシュを処理するコードの末尾に新しい$('.table').DataTables();コールを追加することです(私はnetteに慣れていないので、どこで発生するのか正確にはわかりません)。

+0

はい、私はそれを試してみましたが、それは問題@ondrusu(税込。設定ページ) – ondrusu

+0

を設定する私の選択を、覚えて働いているが、私は、テーブルと再作成のDataTableに新しい行を追加する場合、私は、 を をしたいと思いますそれは、HTMLテーブルからDataTableを作成してからHTMLテーブルを更新することです。あなたがAJAXのデータをソーシングするのは簡単なことですが、DataTableはHTMLからデータを取得するため、DataTableに新しい行を追加してHTMLをリフレッシュすることはできません。 HTMLに直接行を追加する必要があります。つまり、DataTableの '.add()'メソッドを使用して行を追加することはできません。 –

+0

よろしくお願いいたします。確かに、それは新しい質問ですが、NetteとDoctrine 2のフィルタ、並べ替え、ページング、フィルタを "DataGrid"に使用するにはどうすればいいでしょうか? [データグリッド](http://grid.mesour.com/version2/basic/without-settings/)が見つかりました。 – ondrusu

関連する問題