2016-11-28 2 views
0

すべてのデータを一度にロードしていたデータテーブルがありますが、データセットが非常に大きくなってしまうため、サーバー側をすべて移動することにしました。DataTablesクリック可能なサーバー側の行リンクJSON

は、以前私が「データのurl」属性は、この機能でクリックをリッスンを使用することにより、各行へのリンクを埋め込むことができました:

$('#table tbody').on('click', 'tr', function() { 
     var url = this.getAttribute("data-url") 
     window.open(url, "_self"); 
    }); 

それはそのように完全に働いたが、私は持っていませんAJAXとJSONを使ってこの作業を行う方法を理解できました。私はDataTableの行にデータ-url属性を追加してもらうかどうかはわかりませんが

{"recordsFiltered": 1, "recordsTotal": 6, 
"data": [{"4": "", "6": "", "7": "Online", "3": "", "DT_RowClass": "success", 
"5": "", "data-url": "/relative-url/pk/", "2": "TestType2", 
"0": "Test", "1": "ABCD"}], "draw": "11"} 

私のJSONレスポンスは次のようになります。私はこのユースケースの例を見つけるためにドキュメントを精査してきましたが、今まで運がなかったのです。

組み込みの機能がない場合、DataTablesがJSONデータに読み込む関数をオーバーライドする必要があると思いますが、その方法はわかりません。

私はJavaScriptよりも自分のサーバー側の言語がはるかに優れていますので、可能であればもっと具体的な回答に感謝します。

あなたは

答えて

2

上記の@cjungelで述べたように、これを行う方法の1つです。最近のバージョンのDataTableではrowCallbackが使用されています。このJSFiddleを1として

"rowCallback": function(row, data, index){ 
    $(row).attr("data-url", data[1]); 
} 

:だから、例えば、あなたは事のこのタイプを使用することができます。希望が役立ちます。

+0

ありがとう、それはまさに私が必要としたものです。 JSONレスポンスの "data-url"を "8"に変更する必要がありました。なぜなら、その関数のデータリストになかったからです。その後、インデックスを調整してあなたの例を使って完全に検索することができました。 – Del

+1

これにはdocs ['createdRow'](https://datatables.net/reference/option/createdRow)による方が効率的です。 –

+0

ありがとう、@ Gyrocode.com私はより完全にドキュメントを読む必要があります。 – annoyingmouse

1

あなたはfnCreatedRowコールバックを使用することができますありがとうございました。

documentationによれば:

DOMソースを使用している場合、この関数は、TR要素が作成されるときに呼び出される(およびすべてのTD子 要素が挿入されている)、又は登録の せる操作TR要素(クラスの追加など)

+0

お返事ありがとうございます。私は簡単に見つけたので、私はannoyingmouseの答えに行くことをやめたが、あなたも同様に提案した方法に感謝する。 – Del

関連する問題