从Slickgrid中的Dataview获取过滤数据
我正在使用光滑网格的dataView属性来设置光滑网格中的数据。 我应用了标题行filter。 我希望在外部按钮点击上获取过滤数据。 我可以使用dataview.getItems()
获取所有数据,但是当我在标题行上过滤数据并使用相同的属性dataview.getItems()
它返回所有行而不是过滤行数据。
function bindSlickGrid(myOBJ) { var options = { enableCellNavigation: true, enableColumnReorder: true, multiColumnSort: true, showHeaderRow: true, headerRowHeight: 30 , explicitInitialization: true }; dataView = new Slick.Data.DataView(); grid = new Slick.Grid("#myGrid", dataView, myColList, options); dataView.onRowCountChanged.subscribe(function (e, args) { grid.updateRowCount(); grid.render(); }); dataView.onRowsChanged.subscribe(function (e, args) { grid.invalidateRows(args.rows); grid.render(); }); $(grid.getHeaderRow()).delegate(":input", "change keyup", function (e) { var columnId = $(this).data("columnId"); if (columnId != null) { columnFilters[columnId] = $.trim($(this).val()); dataView.refresh(); } }); grid.onHeaderRowCellRendered.subscribe(function (e, args) { $(args.node).empty(); $("") .data("columnId", args.column.id) .val(columnFilters[args.column.id]) .appendTo(args.node); }); grid.init(); dataView.beginUpdate(); dataView.setItems(myOBJ); dataView.setFilter(function (item) { for (var columnId in columnFilters) { if (columnId !== undefined && columnFilters[columnId] !== "") { var c = grid.getColumns()[grid.getColumnIndex(columnId)]; if (item[c.field] != columnFilters[columnId]) { return false; } } } return true; }); dataView.endUpdate(); //Sort data grid.onSort.subscribe(function (e, args) { var cols = args.sortCols; myOBJ.sort(function (dataRow1, dataRow2) { for (var i = 0, l = cols.length; i value2 ? 1 : -1)) * sign; if (result != 0) { return result; } } return 0; }); grid.invalidate(); grid.render(); **console.log(dataview.getItems() )** });
这篇文章很老,但我也在寻找这样的解决方案。
然而,我遇到的几乎所有post都指向了我的解决方案。
我通过为过滤的行添加一个getter来实现它:
function getFilteredItems(){ return filteredItems; }
在dataview中有一个名为filteredItems的变量。 记得也加
"getFilteredItems" : getFilteredItems
下
$.extend(this, { ...