私は、ユーザーが確認した内容に基づいて列をフィルタリングすることができるdataTableを持っています。ロード後のjQuery DataTablesボタントリガーは無限ループになります
私は、ユーザーが現在dataTableに表示されているものをエクスポートできるようにしたいと考えています。ですから、チェックボックスの有無に応じて、どの列を表示するか隠すべきかを知ることができるように、各チェックボックスにはdata-column
という属性があります。
私はこのように私のテーブルを初期化しています
var table = $('.my-table').DataTable({
pageLength:25,
fixedHeader: true,
sScrollX: true,
dom: '<"html5buttons"B>lTfgitp',
buttons: [
{extend: 'copy'},
{extend: 'csv',
title: 'Testing',
exportOptions: {
columns: get_columns_to_export(),
rows: { selected: true }
},
'customize': function(doc){
console.log("==CSV DOC==");
console.log(doc);
}
},
{extend: 'excel',
title: 'Testing',
exportOptions: {
columns: get_columns_to_export(),
rows: { selected: true }
},
'customize': function(doc){
console.log("==EXCEL DOC==");
var sheet = doc.xl.worksheets['sheet1.xml'];
console.log(sheet);
}
},
{extend: 'print',
customize: function (win){
$(win.document.body).addClass('white-bg');
$(win.document.body).css('font-size', '10px');
$(win.document.body).find('table')
.addClass('compact')
.css('font-size', 'inherit');
}
}
]
});
機能get_columns_to_export
だけ表示されている列の番号付きリストを返し、これは実際にだけ、ページの読み込みで、動作します。
私はいくつかの列を再表示する場合(get_columns_to_export()
余分な数を含む異なる配列を返すように)、エクスポートされたファイルのみがテーブル負荷に見つかった元の列を含むことになります。
ボタンを再度トリガする方法を調べましたが、JSのスタックサイズが足りなくなる前にDataTablesが無限ループする問題が発生しています。 DataTableのドキュメントから
は、私がbutton.trigger()
を使用していることは、以下でhereが見つかりました:
$('.buttons-excel').on('click',function(){
table.button('.buttons-excel').trigger();
});
これは、無限ループが発生します。私はまた、return
ステートメントをトリガアクションの後に追加しようとしましたが、何らかの理由でこれを無視し、元の宣言で宣言した元のcustomize
関数に直接入ります。table
です。
DataTableを無限ループで終わらないうちに正しい列番号で更新するにはどうすればよいですか? exportOptionsセクション
これは機能します!これを回避する方法がないかどうかはわかりませんが、 'exportOptions'を更新すると、すべての単一行に対して' get_columns_to_export'が呼び出されます。列の量はすべての行で変化しないので、各行に対して関数を繰り返し呼び出す方法がありますか? – Alex