在我通过调用setFilter()
上的DataView
设置的自定义过滤器功能中,我执行了以下操作来解决过滤算法的问题:
function myFilter(item) {
console.dir(item);
console.dir(arguments);
}
令我惊讶的是,我得到了以下输出(伪输出):
这怎么可能(即arguments[0] !== item
)?
答案 0 :(得分:12)
花了好几个小时后,我正在思考我以为我知道函数如何工作(同时归咎于我的睡眠不足),我终于想到了检查SlickGrid代码。我发现SlickGrid很难重新编译过滤函数(使用toString()和字符串按摩)进行缓存/优化,因此实际的arguments
数组与原始方法签名不匹配。
作为另一个副作用,您不能使用绑定到过滤函数闭包的非全局变量。
将变量绑定到过滤函数闭包的正确方法是使用DataView的setFilterArgs()
方法。 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;
}
答案 1 :(得分:6)
仅供参考:我已经通过“inlineFilters”将过滤功能内联为可选和可配置。默认设置为关闭。