NB: questa risposta si applica a dataTables 1.9.x!
Per $.fn.dataTableExt.sErrMode
l'unico valore che ha importanza è "avviso". È "allerta" o qualsiasi altra cosa. sErrMode
viene gestito dalla funzione dispatcher interno _fnLog
, in v1.9.2 sulla linea 4575 in 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);
}
}
Unfortunelaty, non v'è alcun modo per ignorare DataTable funzioni interne, credetemi - ho provato, non è possibile con la prototipazione o qualsiasi altra cosa. Potete leggere l'autore Allan Jardines proprio commento a questo here:
Mi dispiace dire che a causa di come DataTable è costruito in questo momento , non è possibile eseguire l'override una funzione interna utilizzando Javascript al di fuori di Ambito DataTables. Questo è qualcosa che sarà risolto in ogni volta che vado in giro a fare la serie 2.x (che potrebbe essere un po 'fuori!) - ma al momento è necessario modificare il core.
Si potrebbe pensare che: Ehi, forse l'iLevel-bandiera può essere cambiato da qualche parte nelle impostazioni? Di nuovo, sfortunatamente no. iLevel
è hardcoded in ogni chiamata interna a _fnLog
.
È in qualche modo deludente che dobbiamo scegliere tra brutti avvisi e interruzione completa dell'esecuzione, perché viene generato un errore. Neanche una semplice sostituzione di window.onerror
non funziona. La soluzione è quella di modificare _fnLog
, semplicemente commentare la riga in cui viene generata l'errore personalizzato:
else
{
// throw new Error(sAlert); <-- comment this line
}
e l'esecuzione continua se si dispone di $.fn.dataTableExt.sErrMode = 'throw'
(altro che "alert"), e se si verifica errori. Ancora meglio, si potrebbe avere bisogno di quegli errori gettati in altre situazioni, impostare un flag di fuori, come
window.isDebugging = true;
e
else
{
if (!window.isDebugging) throw new Error(sAlert);
}
Questo non è un "hack", a mio parere, ma passare oltre di un generale comportamento non evitabile di jQuery dataTables che a volte non è soddisfacente.Come scrive lo stesso Allan Jardine nel link sopra riportato:
Perché non si può semplicemente modificare la sorgente? Questo è il punto centrale di aperta fonte :-)
La soluzione migliore sarà sempre di convalidare le informazioni passate al DataTable in modo che non avrà alcun avvertimento per gettare ... – KRyan
che l'estensione non ha fatto nulla per me ... hai mai trovare una risposta a questa domanda? –
Qualche soluzione su questo? Sto affrontando lo stesso problema anche ... Grazie – Wangchao0721