Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重置剑道多重筛选复选框数据源以反映筛选的数据_Javascript_Jquery_Asp.net Mvc_Kendo Ui_Kendo Chart - Fatal编程技术网

Javascript 重置剑道多重筛选复选框数据源以反映筛选的数据

Javascript 重置剑道多重筛选复选框数据源以反映筛选的数据,javascript,jquery,asp.net-mvc,kendo-ui,kendo-chart,Javascript,Jquery,Asp.net Mvc,Kendo Ui,Kendo Chart,我试图在多个字段上筛选数据源。我的网格上有一个剑道多重筛选复选框选项。我为每个列初始化每个剑道多重过滤器 之后,我使用javascipt函数应用了一个过滤器,我将网格的数据设置为过滤后的数据 function filterGrid() { var grid = $("#grid").data('kendoGrid'); var filter = []; filter.push({ field: "ratingPlace", operator: "startswith",

我试图在多个字段上筛选数据源。我的网格上有一个剑道多重筛选复选框选项。我为每个列初始化每个剑道多重过滤器

之后,我使用javascipt函数应用了一个过滤器,我将网格的数据设置为过滤后的数据

function filterGrid() {
    var grid = $("#grid").data('kendoGrid');
    var filter = [];
    filter.push({ field: "ratingPlace", operator: "startswith", value: "US" });
    grid.dataSource.filter(filter);
    grid.dataSource.data(grid.dataSource.view());
}
因此,该函数将过滤器应用于网格。现在,当我单击“剑道多重过滤器”选项时,旧数据源中的所有数据都会显示在过滤器列表中

我怎样才能避免这种情况?我只需要过滤后的数据才能在过滤后的列表中可用,而不是在整个数据源项中可用。我没有这个 在执行filterGrid()函数后初始化剑道多复选框筛选器时出现问题。有没有办法重新初始化数据源 每列的(“kendoFilterMultiCheck”)??我附带了一个JSFIDLE示例来演示同样的问题

1) 首先,通过单击带有初始数据源的列标题来初始化所有过滤器多复选框 2) 点击过滤器按钮 3) 数据源已被替换 4) 单击filter multi check with new dataSource-旧筛选器数据显示在列表中


我的建议是为“多过滤器”复选框定义自定义数据源,只需调用其读取方法即可重新加载数据

$("th.k-filterable[data-field='ratingPlace']").data().kendoFilterMultiCheck.checkSource.read();

这基本上是在Telerik论坛上调整给定的网格,并将其更改为使用本地网格数据,而不是单独的数据源。代码还对新的过滤器数据进行排序(这是我遇到的原始问题)

功能移除副本(项目、字段){
var getter=函数(项){return item[field]};
var结果=[];
var指数=0;
var-seen={};
while(索引
您找到这个问题的答案了吗?我也有同样的问题,需要根据在单独列上选择的过滤器刷新ColumnMenu mulitfilters
  function removeDuplicates(items, field) {
     var getter = function (item) { return item[field] };
     var result = [];
     var index = 0;
     var seen = {};

     while (index < items.length) {
        var item = items[index++];
        var text = getter(item);

        if (text !== undefined && text !== null && !seen.hasOwnProperty(text)) {
           result.push(item);
           seen[text] = true;
        }
     }

     return result;
  }

  function onFilterMenuOpen(e) {
     // Refresh and Sort the multi-filter selections
     if (e.field == "ratingPlace") {
        // Build up list of unique values for this column
        var gridView = $("#grid").data("kendoGrid").dataSource.view();
        var uniqueDsResult = removeDuplicates(gridView, e.field);

        // Empty the existing filter and populate with new data
        var filterMultiCheck = this.thead.find("[data-field=" + e.field + "]").data("kendoFilterMultiCheck")
        filterMultiCheck.container.empty();
        filterMultiCheck.checkSource.data(uniqueDsResult.sort());
        filterMultiCheck.createCheckBoxes();
     }
  }