查看 Slickgrid 示例并使用 Google Chrome,我在过滤器上设置了一个断点,以查看内部发生了什么。断点在第 87 行工作正常http://mleibman.github.com/SlickGrid/examples/example-header-row.html
但它在第 143 行不起作用
http://mleibman.github.com/SlickGrid/examples/example4-model.html
为什么不?
查看 Slickgrid 示例并使用 Google Chrome,我在过滤器上设置了一个断点,以查看内部发生了什么。断点在第 87 行工作正常http://mleibman.github.com/SlickGrid/examples/example-header-row.html
但它在第 143 行不起作用
http://mleibman.github.com/SlickGrid/examples/example4-model.html
为什么不?
发生这种情况是因为第二个示例在构造函数中将inlineFilters
选项设置DataView
为 true,而第一个示例则没有。这意味着,在第二个示例中,SlickGrid 正在重新编译您的过滤器函数并将其内联到循环中以避免函数调用开销。这显着加快了对大型数据集的过滤。
如果要调试它,设置断点将不起作用。您需要debugger
在过滤器函数本身中添加一条语句。
尽管example4将该myFilter
函数设置为 dataView 过滤器,但过滤是通过滑块和文本框事件连接完成的 - 检查第 288 行和第 303 行是否相同。这些上的过滤器断点应该按预期工作。
编译过滤器。
示例 4中的第 197 行:dataView = new Slick.Data.DataView({ inlineFilters: true });
当 dataView 初始化时, inlineFilters 标志会导致 dataView “编译”过滤器,因此不会调用原始过滤器函数。使用了新的“编译”函数。
有关 Complied Filters的代码,请参见slick.dataview.js中的第 201 和 466 行。