diff options
-rw-r--r-- | examples/example-grouping.html | 3 | ||||
-rw-r--r-- | examples/example-optimizing-dataview.html | 2 | ||||
-rw-r--r-- | examples/example4-model.html | 2 | ||||
-rw-r--r-- | examples/example5-collapsing.html | 2 | ||||
-rw-r--r-- | slick.dataview.js | 40 | ||||
-rw-r--r-- | tests/model benchmarks.html | 2 |
6 files changed, 42 insertions, 9 deletions
diff --git a/examples/example-grouping.html b/examples/example-grouping.html index 48db2cb..f07ef7a 100644 --- a/examples/example-grouping.html +++ b/examples/example-grouping.html @@ -222,7 +222,8 @@ $(function () { var groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider(); dataView = new Slick.Data.DataView({ - groupItemMetadataProvider: groupItemMetadataProvider + groupItemMetadataProvider: groupItemMetadataProvider, + inlineFilters: true }); grid = new Slick.Grid("#myGrid", dataView, columns, options); diff --git a/examples/example-optimizing-dataview.html b/examples/example-optimizing-dataview.html index 36b5082..f7fc48c 100644 --- a/examples/example-optimizing-dataview.html +++ b/examples/example-optimizing-dataview.html @@ -121,7 +121,7 @@ data[i] = new DataItem(i); } - dataView = new Slick.Data.DataView(); + dataView = new Slick.Data.DataView({ inlineFilters: true }); grid = new Slick.Grid("#myGrid", dataView, columns, options); var pager = new Slick.Controls.Pager(dataView, grid, $("#pager")); diff --git a/examples/example4-model.html b/examples/example4-model.html index 0587ddd..bbf3fa9 100644 --- a/examples/example4-model.html +++ b/examples/example4-model.html @@ -194,7 +194,7 @@ $(function () { } - dataView = new Slick.Data.DataView(); + dataView = new Slick.Data.DataView({ inlineFilters: true }); grid = new Slick.Grid("#myGrid", dataView, columns, options); grid.setSelectionModel(new Slick.RowSelectionModel()); diff --git a/examples/example5-collapsing.html b/examples/example5-collapsing.html index 32524d2..9202c3b 100644 --- a/examples/example5-collapsing.html +++ b/examples/example5-collapsing.html @@ -182,7 +182,7 @@ $(function () { // initialize the model - dataView = new Slick.Data.DataView(); + dataView = new Slick.Data.DataView({ inlineFilters: true }); dataView.beginUpdate(); dataView.setItems(data); dataView.setFilter(myFilter); diff --git a/slick.dataview.js b/slick.dataview.js index 2889b94..0bb8a0b 100644 --- a/slick.dataview.js +++ b/slick.dataview.js @@ -23,7 +23,8 @@ var self = this; var defaults = { - groupItemMetadataProvider: null + groupItemMetadataProvider: null, + inlineFilters: false }; @@ -526,14 +527,45 @@ return fn; } + function uncompiledFilter(items, args) { + var retval = [], idx = 0; + + for (var i = 0, ii = items.length; i < ii; i++) { + if (filter(items[i], args)) { + retval[idx++] = items[i]; + } + } + + return retval; + } + + function uncompiledFilterWithCaching(items, args, cache) { + var retval = [], idx = 0, item; + + for (var i = 0, ii = items.length; i < ii; i++) { + item = items[i]; + if (cache[i]) { + retval[idx++] = item; + } else if (filter(item, args)) { + retval[idx++] = item; + cache[i] = true; + } + } + + return retval; + } + function getFilteredAndPagedItems(items) { if (filter) { + var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter; + var batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching; + if (refreshHints.isFilterNarrowing) { - filteredItems = compiledFilter(filteredItems, filterArgs); + filteredItems = batchFilter(filteredItems, filterArgs); } else if (refreshHints.isFilterExpanding) { - filteredItems = compiledFilterWithCaching(items, filterArgs, filterCache); + filteredItems = batchFilterWithCaching(items, filterArgs, filterCache); } else if (!refreshHints.isFilterUnchanged) { - filteredItems = compiledFilter(items, filterArgs); + filteredItems = batchFilter(items, filterArgs); } } else { // special case: if not filtering and not paging, the resulting diff --git a/tests/model benchmarks.html b/tests/model benchmarks.html index 43b6087..25dc253 100644 --- a/tests/model benchmarks.html +++ b/tests/model benchmarks.html @@ -36,7 +36,7 @@ d["duration"] = Math.round(Math.random() * 14); } - var dv = new Slick.Data.DataView(); + var dv = new Slick.Data.DataView({inlineFilters: true}); dv.beginUpdate(); dv.setItems(data); dv.setFilter(filter); |