Kendo过滤意外行为

时间:2016-06-15 05:21:50

标签: kendo-ui kendo-grid

我正在尝试将过滤列设置为multi,并将搜索运算符设置为contains。不幸的是,过滤器会向equals运算符发出请求。我的剑道版本是2015.3.930。我的列配置对象如下所示:

filterable: {
  operator: "contains", 
  multi: true,
  dataSource: {
    transport: {
      read: filterReadMethod
    }
  }
}

我想要的是一个包含chechbox并按contains过滤的列过滤器(在网格中)。有什么建议吗?

我已经尝试过:

cell: {
  showOperators: false,
  operator: "contains"
},

并且

operators: {
  string: {
    contains: "Contains"
  }
}

1 个答案:

答案 0 :(得分:1)

Check out this example on the Kendo API reference。我认为你的代码需要像:

filterable: {
    multi: true,
    operators: {
        string: {
            contains: "Contains"
        }
    }
}, 

<强>更新

经过一些测试后,我会说没有。不,你不能同时使用multi和contains。看来,通过设置multi: true,引擎盖下的Kendo会创建过滤器,并将运算符设置为eq。数据源的change事件实际上让您偷看,但即使手动设置该值也不起作用。

我在Kendo Dojo进行了测试。我最终得到的代码如下。通过查看Kendo datasource reference,您可以看到有一些方法可以访问正在使用的过滤器。

所以让我限定我的权威性#34; no&#34;通过说它是JavaScript,肯定有一个&#34; hacky&#34;解决这个问题的方法。

但是,如果这确实是您需要的功能,那么我建议您点击Telerik网站上的支持论坛。即使你不再拥有有效的合同,他们也很乐意回答简单的问题,虽然它会在他们到达之前的几天。

希望我有更好的答案。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Kendo UI Snippet</title>

    <link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.common.min.css"/>
    <link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.rtl.min.css"/>
    <link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.silver.min.css"/>
    <link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.2.607/styles/kendo.mobile.all.min.css"/>

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://kendo.cdn.telerik.com/2016.2.607/js/kendo.all.min.js"></script>
</head>
<body>

<div id="grid"></div>
<script>
$("#grid").kendoGrid({
  columns: [ {
    field: "country",
    filterable: {
      multi:true,
      search: true,
      dataSource: [ 
        { country: "BG" }, 
        { country: "USA" }
      ]
    },
  } ],
  filterable: true,
  dataSource: {
    data: [ 
      { country: "BG" }, 
      { country: "USA" }, 
      { country: "1BG3" }, 
      { country: "1USA4" } 
    ],
    /*filter: {
      logic: "or", 
      filters: [
        { field: "country", operator: "contains", value: "BG" }
      ]
    },*/
    change: function(e) {
      try{
        //e.sender._filter.filters[0].operator = "contains";
        this.filter().filters[0].operator = "contains";
        var f = this.filter().filters[0].value;
        console.log(f);
      }catch(e1) { 
        console.log(e1);
      }
    }
  }
});
</script>
</body>
</html>