summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/example-grouping.html3
-rw-r--r--examples/example-optimizing-dataview.html2
-rw-r--r--examples/example4-model.html2
-rw-r--r--examples/example5-collapsing.html2
-rw-r--r--slick.dataview.js40
-rw-r--r--tests/model benchmarks.html2
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);