Javascript SlickGrid DataView筛选器函数行为异常

Javascript SlickGrid DataView筛选器函数行为异常,javascript,filtering,slickgrid,Javascript,Filtering,Slickgrid,在我的自定义筛选函数中,我通过在我的DataView上调用setFilter()设置了该函数,我执行了以下操作来解决筛选算法的问题: function myFilter(item) { console.dir(item); console.dir(arguments); } 令我惊讶的是,我得到了以下输出(伪输出): 对象-实际项目对象 参数-一个两项数组,其中第一项为数据集数组(DataView使用),第二项未定义 这是怎么回事(例如,参数[0]!==item)呢?在花了

在我的自定义筛选函数中,我通过在我的
DataView
上调用
setFilter()
设置了该函数,我执行了以下操作来解决筛选算法的问题:

function myFilter(item) {
    console.dir(item);
    console.dir(arguments);
}
令我惊讶的是,我得到了以下输出(伪输出):

  • 对象-实际项目对象
  • 参数-一个两项数组,其中第一项为数据集数组(DataView使用),第二项未定义

这是怎么回事(例如,
参数[0]!==item
)呢?

在花了几个小时挠头,思考我认为自己知道的函数如何工作(同时指责我睡眠不足)之后,我终于想到检查代码。我发现了SlickGrid重新编译过滤函数(使用toString()和字符串按摩)以进行缓存/优化的困难方法,因此实际的
参数
数组与原始方法签名不匹配

另一个副作用是,不能使用绑定到筛选函数闭包的非全局变量

将变量绑定到筛选函数闭包的正确方法是使用DataView的
setFilterArgs()
方法。在我的(重新编译的)过滤函数中,
undefined
被我看作是
arguments
数组的第二项,它实际上是一个用来接收通过
setFilterArgs()传递的内容的插槽

更新

下面是SlickGrid对过滤器函数的作用。测试功能:

function (item) {
    // my code here
}
重新编译的版本(为可读性重新格式化):

函数(_项,_参数){
var _retval=[],_idx=0;
变量项,未定义=_参数;
对于(变量i=0,\u-il=\u items.length;\u-i<\u-il;\u-i++){
项目=_项目[_i];
//我的代码在这里
}
返回_retval;
}

仅供参考:我已经通过“inlineFilters”使过滤器函数内联成为可选的和可配置的。默认情况下,该设置处于关闭状态。

以文档形式询问和回答自己的问题,以潜在地帮助可能出现类似症状的其他用户。谷歌搜索没有给我带来任何结果。希望现在它会为其他人…超级!谢谢你的帮助。这是一个很棒的软件。我也用很难的方法解决了这个问题。虽然为我指明了正确的方向
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;
}