1

在这里搜索,似乎找不到答案。

我用 SlickGrid 设置了一个非常复杂的网格。

搜索功能位于自定义工具栏中。我将它连接到网格函数的调用。

例如:

[HTML]

 <input name='name' id='id' class='searchable'>

[JS]

$('.searchable').on('change' , function() {
     var searchTerm = {};     
         searchTerm[$(this).attr('name')] = $(this).val();

     dataview.setFilterArgs(searchTerm);
     dataview.refresh();
});

我可以看到参数传递给自定义过滤器

var customFilter = function(item, args) {
    ***$.each(args , function(key , val) {
        if (val!=='' && val!==null) {
           return (item[key] == val);
        }
    });***
return true;
}

[!] 问题是当你在 $.each 里面时,如果你“返回”它只会跳过循环。但是在函数之外没有任何返回。

但是网格上什么也没有发生。什么都没有被过滤

这是我的设置

dataview = new Slick.Data.DataView();
grid = new Slick.Grid(grid_id , dataview , columns , options);
grid.selectionModel(new Slick.RowSelectionModel());

grid.init();

dataview.beginUpdate();
dataview.setItems(gridData);
dataview.setFilter(customFilter);
dataview.endUpdate();

我一直在关注 github 上的两个过滤器示例。但除此之外我看不出有什么不同

如果我用

dataview = new Slick.Data.DataView({inlineFilters: true});

我收到一个错误:

未捕获的 SyntaxError:未定义的标签“_coreloop”(slick.dataview.js 行:639)

尝试阅读代码但缺少注释......所以我真的不知道问题出在哪里。

有人遇到类似的问题吗?

4

1 回答 1

1

如果您将 dataView 和 columnFilters 声明为全局变量,则可以调用此函数:

function SetfilterOnGrid(SearchPhrase) {
    columnFilters = {"1": SearchPhrase};
    dataView.refresh();
}

数字“1”是列 ID SearchPhrase 是您在网格中搜索的短语

至于清除过滤器,您可以使用此功能:

function ClearFilterOnGrid()
{
    columnFilters = {};
    dataView.refresh();
}
于 2013-10-11T10:04:12.260 回答