SlickGrid DataView过滤器功能异常

时间:2012-02-03 10:55:00

标签: javascript filtering slickgrid

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

function myFilter(item) {
    console.dir(item);
    console.dir(arguments);
}

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

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

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

2 个答案:

答案 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”将过滤功能内联为可选和可配置。默认设置为关闭。