Потратив часы на то, чтобы почесать голову и обдумать то, что, как мне кажется, я знаю о том, как работают функции (обвиняя меня в недосыпании), я наконец-то подумал о проверке кода SlickGrid.Я обнаружил, что SlickGrid перекомпилирует функцию фильтрации (используя toString () и массива строк) для кэширования / оптимизации, и поэтому фактический массив arguments
не соответствует исходной сигнатуре метода.
Как другойпобочный эффект, вы не можете использовать неглобальные переменные, которые связаны с закрытием функции фильтрации.
Правильный способ привязать переменные к закрытию функции фильтрации - это использовать setFilterArgs()
метод DataView,undefined
, который я видел как второй элемент массива arguments
в моей (перекомпилированной) функции фильтрации, на самом деле был слотом для получения того, что прошло через setFilterArgs()
.
Обновление
Вот что SlickGrid делает с функцией фильтра.Функция тестирования:
function (item) {
// my code here
}
Перекомпилированная версия (переформатирована для удобства чтения):
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;
}