繁体   English   中英

Kendo ui网格-使用Ajax发布过滤

[英]Kendo ui grid - filter with ajax post

我正在尝试过滤我的数据源,但使用的是ajax发布,原因是,我在服务器端的主main GET上有这样的条件:

WHERE idPai IS NULL OR idPai = 0

现在我想要的是过滤datsource,但在服务器端没有该条件,所以首先要做的是:

       var value = $("#inputPastaFiltro").val();

        $.ajax({
        type: 'POST',
        url: "basedados.php",
        data: {dataFilter:value},
        dataType: "json",
        success: function(result) 
        {
           $('#gridBaseDados').data('kendoGrid').dataSource = new kendo.data.DataSource({ data: result.data[0] }).query({
            filter:{
              logic:"or",
              filters:[
                {field:"nome", operator:"contains",value:result.data[0].nome}]  
             }
          });
        },

在服务器端,我创建了:

else if($_POST['dataFilter'])

我有相同的GET但没有上面已经写过的条件,以这种方式(我认为)它可以搜索所有内容,但是您已经意识到其余的逻辑是不正确的。 如果我这样做:

var value = $("#inputPastaFiltro").val();
dataSource.query({
                filter:{
                  logic:"or",
                  filters:[
                    {field:"nome", operator:"contains",value:value}]  
                 }
              });

它很好地工作,并且它还执行了动态搜索,只要在输入中插入单词就刷新网格(这太棒了!)...但是它基于具有这种条件的我的MAIN GET。

谁能帮我些忙吗?抱歉英语不好。

问候。

使用数组result.data[0]创建dataSource后,将对该数据执行过滤 所以我认为您想在执行过滤器时再次执行查询,对吗? 与kendo一起使用时,您调用ajax请求的方式不太好。 您应该这样做:

$('#gridBaseDados').kendoGrid({
    ...
    dataSource: {
        transport: {
            read: function(options) {
                $.ajax({
                    ...
                    success: function(result) {
                        options.success(result.data[0]);
                    }
                });
            }
        }
    }
});

最好在dataSource.transport.read使用一个函数。 因此,您具有options参数,该参数具有dataSource的success回调。 这将覆盖默认dataSource的请求,然后保留整个行为。 您的过滤器应该可以正常工作。 他们将在每次更改该read函数时对其进行调用。

试试看,并告诉我们结果。 希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM