注意: この回答は dataTables 1.9.x に適用されます!
唯一の$.fn.dataTableExt.sErrMode
重要な値は「アラート」です。それは「アラート」またはその他です。sErrMode
内部ディスパッチャー関数によって処理されます_fnLog
。v1.9.2 の行 4575 についてmedia/js/jquery.dataTables.js
:
function _fnLog( oSettings, iLevel, sMesg )
{
var sAlert = (oSettings===null) ?
"DataTables warning: "+sMesg :
"DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg;
if ( iLevel === 0 )
{
if ( DataTable.ext.sErrMode == 'alert' )
{
alert( sAlert );
}
else
{
throw new Error(sAlert);
}
return;
}
else if ( window.console && console.log )
{
console.log( sAlert );
}
}
残念ながら、dataTables の内部関数をオーバーライドする方法はありません。著者のアラン・ジャーディンス自身のコメントをここで読むことができます:
申し訳ありませんが、現在の DataTables の構築方法により、DataTables のスコープ外で Javascript を使用して内部関数をオーバーライドすることはできません。これは、私が 2.x シリーズを実行するときにいつでも対処されるものです (しばらく時間がかかるかもしれません!) - しかし、現時点では、コアを変更する必要があります。
次のように考えることができます。繰り返しますが、残念ながらいいえ。iLevel
への各内部呼び出しでハードコーディングされてい_fnLog
ます。
エラーがスローされるため、見苦しいアラートと実行の完全な停止のどちらかを選択しなければならないのは、なんとなく残念です。の単純なオーバーライドもwindow.onerror
機能しません。解決策は_fnLog
、カスタム エラーがスローされる行をコメント アウトするだけです。
else
{
// throw new Error(sAlert); <-- comment this line
}
$.fn.dataTableExt.sErrMode = 'throw'
そして、 (「アラート」以外のもの) がある場合、およびエラーが発生した場合、実行は続行されます。さらに良いことに、他の状況でスローされたエラーが必要になる可能性があり、次のように外部にフラグを設定します
window.isDebugging = true;
と
else
{
if (!window.isDebugging) throw new Error(sAlert);
}
これは私の意見では「ハック」ではありませんが、満足できない場合がある一般的な避けられない jQuery dataTables の動作を覆すことです。アラン・ジャーディン自身が上記のリンクに書いているように:
ソースを変更できないのはなぜですか?それがオープンソースの要点です:-)