Dopo aver passato ore a grattarmi la testa ea meditare su quello che pensavo di sapere su come funzionano le funzioni (incolpando la mia mancanza di sonno), ho finalmente pensato di controllare il codice SlickGrid. Ho scoperto il modo in cui SlickGrid ricompila la funzione di filtro (utilizzando toString() e il massaggio delle stringhe) per la memorizzazione nella cache/l'ottimizzazione e quindi l'effettivo array arguments
non corrisponde alla firma del metodo originale.
Come un altro effetto collaterale, non è possibile utilizzare variabili non globali che sono legate alla chiusura della funzione di filtro.
Il metodo corretto per associare le variabili alla chiusura della funzione di filtro consiste nell'utilizzare il metodo setFilterArgs()
di DataView. Il undefined
ho visto come il secondo elemento dell'array arguments
nella mia funzione di filtro (ricompilata) era in realtà uno slot per ricevere ciò che è passato attraverso setFilterArgs()
.
Aggiornamento
Ecco cosa SlickGrid fa per la funzione di filtro. Funzione di prova:
function (item) {
// my code here
}
versione Ricompilato (riformattato per migliorare la leggibilità):
function (_items, _args) {
var _retval = [], _idx = 0;
var item, undefined = _args;
for (var _i = 0, _il = _items.length; _i < _il; _i++) {
item = _items[_i];
// my code here
}
return _retval;
}
fonte
2012-02-03 10:59:03
Chiedere e rispondere alla propria domanda come documentazione per aiutare potenzialmente altri utenti che potrebbero soffrire di un sintomo simile. Googling non ha prodotto risultati per me. Spero che lo faccia anche per gli altri ... –