SlickGrid DataView过滤器功能异常

Ate*_*ral 9 javascript filtering slickgrid

在我通过调用setFilter()my 设置的自定义过滤器功能中DataView,我执行了以下操作来解决过滤算法的问题:

function myFilter(item) {
    console.dir(item);
    console.dir(arguments);
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我得到了以下输出(伪输出):

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

这怎么样(即arguments[0] !== item)?

Ate*_*ral 12

花了好几个小时后,我琢磨着我以为我知道函数如何工作(同时归咎于我的睡眠不足),我终于想到了检查SlickGrid代码.我发现SlickGrid很难重新编译过滤函数(使用toString()和字符串按摩)进行缓存/优化,因此实际arguments数组与原始方法签名不匹配.

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

将变量绑定到过滤函数闭包的正确方法是使用setFilterArgs()DataView 的方法.在undefined我看到的第二项arguments在我(重新编译)过滤功能阵列竟是接受什么穿过插槽setFilterArgs().

更新

这是SlickGrid对过滤器功能的作用.测试功能:

function (item) {
    // my code here
}
Run Code Online (Sandbox Code Playgroud)

重新编译版本(为便于阅读而重新格式化):

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;
}
Run Code Online (Sandbox Code Playgroud)


Tin*_*Tin 6

仅供参考:我已经通过"inlineFilters"将过滤功能内联为可选和可配置.默认设置为关闭.