我正在尝试过滤我的数据源,但是使用ajax帖子,原因是,我在服务器端的主主 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具有这种条件
任何人都可以给我一些帮助吗?抱歉英文不好。
的问候。
答案 0 :(得分:1)
使用数组result.data[0]
创建数据源后,将对该数据执行过滤器。所以我认为你想要再次执行查询,当它执行过滤器时,对吧?当你使用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请求,然后保留整个behiviour。您的过滤器应该按预期工作。每次更改时,他们都会调用read
函数。
试一试并告诉我们结果。我希望它有所帮助。