jqGrid:如何仅加载属性设置为true的行

jqGrid:如何仅加载属性设置为true的行,jqgrid,Jqgrid,我有一个JSON对象,如下所示: { "rows": [ { "id":1, "name": "Peter", "hasData": true, }, { "id":2, "name": "Tom", "hasData": false, }] } gridComplete: function(){ var rowObjects = this.p.data; for(var i = 0; i<rowObject

我有一个JSON对象,如下所示:

{
  "rows": [
  {
    "id":1,
    "name": "Peter",
    "hasData": true,
  },
  {
    "id":2,
    "name": "Tom",
    "hasData": false,
  }]
}
gridComplete: function(){
  var rowObjects = this.p.data;
    for(var i = 0; i<rowObjects.length;i++){
      if(rowObjects[i].hasData == false){
        $(this).jqGrid('delRowData',rowObjects[i].id);
      }
    }
  },
我希望jqGrid只加载有数据的行,这意味着当
“hasData”==true

我首先想知道做这件事最好的方法是什么,其次想知道怎么做

更新: 我尝试了以下方法:

{
  "rows": [
  {
    "id":1,
    "name": "Peter",
    "hasData": true,
  },
  {
    "id":2,
    "name": "Tom",
    "hasData": false,
  }]
}
gridComplete: function(){
  var rowObjects = this.p.data;
    for(var i = 0; i<rowObjects.length;i++){
      if(rowObjects[i].hasData == false){
        $(this).jqGrid('delRowData',rowObjects[i].id);
      }
    }
  },
gridComplete:function(){
var rowObjects=此.p.data;

对于(var i=0;i我假设您使用
数据类型:“json”从服务器加载数据
loadonce:true
选项结合使用。如果使用jqGrid的fork,解决方案非常简单。免费jqGrid允许在显示第一页数据之前对服务器返回的数据进行排序和筛选。需要添加
forceClientSorting:true
以强制jqGrid和
post应用操作Data.filters
使用所需的筛选器,并选择
search:true
应用筛选器:

$(“#网格”).jqGrid({
...
数据类型:“json”,
postData:{
//filters属性是需要应用的筛选器
//到从服务器加载的数据
过滤器:JSON.stringify({
groupOp:“和”,
组:[],
规则:[{字段:“hasData”,op:“eq”,数据:“true”}]
})
},
有一次:是的,
forceClientSorting:对,
搜索:对,
//要在过滤器中使用“hasData”属性,必须
//在colModel或additionalProperties中包含“hasData”列
其他属性:[“hasData”],
...
});

请参阅演示。演示使用JSFiddle模拟服务器响应。

我假设您使用
数据类型:“json”从服务器加载数据
loadonce:true
选项结合使用。如果使用jqGrid的fork,解决方案非常简单。免费jqGrid允许在显示第一页数据之前对服务器返回的数据进行排序和筛选。需要添加
forceClientSorting:true
以强制jqGrid和
post应用操作Data.filters
使用所需的筛选器,并选择
search:true
应用筛选器:

$(“#网格”).jqGrid({
...
数据类型:“json”,
postData:{
//filters属性是需要应用的筛选器
//到从服务器加载的数据
过滤器:JSON.stringify({
groupOp:“和”,
组:[],
规则:[{字段:“hasData”,op:“eq”,数据:“true”}]
})
},
有一次:是的,
forceClientSorting:对,
搜索:对,
//要在过滤器中使用“hasData”属性,必须
//在colModel或additionalProperties中包含“hasData”列
其他属性:[“hasData”],
...
});

请参阅演示。演示使用JSFIDLE来模拟服务器响应。

我可以向您推荐另一种解决方案(如果您使用),它可以用于任何数据类型和任何设置。其思想是使用beforeProcessing事件来过滤所需的数据

为此,我们假设数据如您所述。以下是代码:

$("#grid").jqGrid({
...
        beforeProcessing : function (data, st, xhr) {

            var test= data.rows.filter(function (row) {
                if(row.hasData == true ) { // true is not needed but for demo
                    return true;
                } else {
                    return false;
                }
            });
            data.rows = test;
            return true;
        }
...
});

如果您使用免费jqGrid,我想该脚本将在免费jqGrid中工作

我可以向您推荐另一种解决方案(如果您使用),它可以用于任何数据类型和任何设置。其思想是使用beforeProcessing事件来过滤所需的数据

为此,我们假设数据如您所述。以下是代码:

$("#grid").jqGrid({
...
        beforeProcessing : function (data, st, xhr) {

            var test= data.rows.filter(function (row) {
                if(row.hasData == true ) { // true is not needed but for demo
                    return true;
                } else {
                    return false;
                }
            });
            data.rows = test;
            return true;
        }
...
});

我想,如果您使用免费的jqGrid,脚本将可以工作。

尝试了您的方法,在第一页上效果很好。但是(仅供参考,json对象只是一个示例,因为真正的json包含1000多个对象)当转到下一页时,它会在加载时陷入困境,并且从不处理加载。您可以从服务器上发布完整数据吗?您可以使用console.log查看来自服务器的数据以及如何处理。尝试了您的方法,在第一页上效果很好。但是(仅供参考,json对象只是一个示例,因为真正的json包含1000多个对象)当进入下一页时,它会在加载时陷入困境,并且从不处理加载。您可以从服务器发布完整数据吗?您可以使用console.log查看来自服务器的数据以及如何处理。出于某种原因,“hasData”属性不希望读取包含的值。当应用筛选器时,它会像不存在一样掠过该值。此外,至少对我来说,初始化filters.rules会给我一个类型错误,我可以通过将其放置在筛选器中轻松解决。groups@lynxidngo:您使用哪个版本的jqGrid和jqGrid的哪个分支curre问题出在哪里?你的代码在哪里?很抱歉,我在回答中发布了演示。演示正确吗?如果你写下你有一些问题,那么你可以用你的代码修改我的演示,保存它并发布修改版本的URL。我使用的是“jqGrid 5.2.1”。演示效果很好。我不知道粘贴我的代码会有多大意义,因为它大约有800行。@Lynxindgo:我写道,我的答案显示了在我开发的jqGrid的免费jqGrid fork的情况下如何实现您的需求。我描述的功能只存在于免费jqGrid中。Guriddo jqGrid JS 5.2.1是commercial版本以找到的价格提供。这是您的选择,使用哪个版本。我要求您将代码作为对您之前评论的响应,您在评论中写到了一些错误。我发现了我的错误。问题是我从服务器接收到的JSON对象。其中一个属性正在与s中的其他属性交互这样,它之后的所有内容都会被忽略。出于某种原因,“hasData”属性不希望读取包含的值。当应用筛选器时,它只是在值上方飞行,就像