【问题标题】:SlickGrid DataView filter function behaving abnormallySlickGrid DataView 过滤器功能异常
【发布时间】:2012-02-26 00:03:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 提出和回答自己的问题作为文档,以潜在地帮助可能遭受类似症状的其他用户。谷歌搜索对我没有任何结果。希望现在它会对其他人...

标签: javascript filtering slickgrid


【解决方案1】:

仅供参考:我已通过“inlineFilters”使过滤器函数内联成为可选和可配置的。该设置默认关闭。

【讨论】:

  • 超级!感谢 SlickGrid。这是一款很棒的软件。
【解决方案2】:

在花了好几个小时摸不着头脑并思考我认为我对函数如何工作的了解(同时归咎于我缺乏睡眠)之后,我终于想到检查 SlickGrid 代码。我发现 SlickGrid 重新编译过滤函数(使用 toString() 和字符串按摩)以进行缓存/优化的困难方式,因此实际的 arguments 数组与原始方法签名不匹配。

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

将变量绑定到过滤函数的闭包的正确方法是使用DataView的setFilterArgs()方法。我在(重新编译的)过滤函数中看到的arguments数组的第二项undefined实际上是一个用于接收通过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;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 2015-01-20
  • 1970-01-01
  • 2023-04-06
  • 2012-03-31
  • 1970-01-01
  • 2013-04-11
  • 2013-09-04
相关资源
最近更新 更多