【问题标题】:jqGrid - is it possible to filter the value of jsonmap in colModeljqGrid - 是否可以在 colModel 中过滤 jsonmap 的值
【发布时间】:2011-11-15 22:44:30
【问题描述】:

我在玩jqGrid,想知道jqGrid的colModel中jsonmap的值是否可以有过滤值。

ColModel

colModel:[
   {name:'fname',index:'action',jsonmap:'cells.cell.colname["fname"].value', width:50, align:"center", resizable:false}
]

JSON

{   
    "rows":[
        {

            "cells":
            {               
                "cell":{
                    "value":"Mark",
                    "colname": "fname"
                }
            }
        }
   ]
}

JSON 输入中“cells”属性的值作为一个数组

{   
    "rows":[
        {

            "cells":[
            {               
                "cell":{
                    "value":"Mark",
                    "colname": "fname"
                }
            }]
        }
   ]
}

用下面的colModel不起作用

colModel:[
   {name:'fname',index:'action',jsonmap:'cells.cell.value', width:50, align:"center", resizable:false}
]

放置多个列以及为什么建议添加过滤器 - 我在使用以下结构将 json 映射到 jsonmap 时遇到问题。这就是为什么我问我们是否可以添加一个过滤器。

{   
    "rows":[
        {

            "cells":
            {               
                "cell":{
                    "value":"Mark",
                    "colname": "fname"
                },
                "cell":{
                    "value":"Strong",
                    "colname": "lname"
                },
                "cell":{
                    "value":"Hourly",
                    "colname": "emptype"
                }
            }
        }
   ]
}

已更新:JSON数据可以是

{
    "wrapper": {
        "rows": [
            {
                "cells": [
                    {
                        "value": "Mark",
                        "colname": "fname"
                    },
                    {
                        "value": "Strong",
                        "colname": "lname"
                    },
                    {
                        "value": "Hourly",
                        "colname": "emptype"
                    }
                ]
            },
            {
                "cells": [
                    {
                        "value": "Mark2",
                        "colname": "fname"
                    },
                    {
                        "value": "Strong2",
                        "colname": "lname"
                    },
                    {
                        "value": "Hourly2",
                        "colname": "emptype"
                    }
                ]
            }
        ]
    }
}

【问题讨论】:

    标签: json jqgrid


    【解决方案1】:

    您可以将jsonmap 用作函数

    jsonmap: function (item) {
        // item.cells.cell.colname is "fname"
        return item.cells.cell.value;
    }
    

    jqGrid的jsonReader: { repeatitems: false }选项是额外需要的。

    可以阅读您发布的 JSON 输入(请参阅 here),但我仍然不明白您的建议。为什么 JSON 输入中 "cells" 属性的值是对象而不是数组?为什么需要"cells" 属性?您如何想象以一列的形式放置更多内容?通常,您会看到在jsonmap 函数中,您可以访问"rows" 数组中的整个项目,因此您可以实现从数据中读取字段的任何算法。

    更新:我写了the next demo,它读取了您发布的最新版本的 JSON 数据。实现的想法保持不变 - 将jsonmap 用作函数。

    列模型可以如下

    colModel: [
        {name: 'fname', jsonmap: function (obj) { return getVaueByName(obj.cells, "fname"); }},
        {name: 'lname', jsonmap: function (obj) { return getVaueByName(obj.cells, "lname"); }},
        {name: 'emptype', jsonmap: function (obj) { return getVaueByName(obj.cells, "emptype"); }}
    ],
    cmTemplate: {width: 70, align: "center", resizable: false},
    gridview: true,
    height: 'auto',
    jsonReader: {
        root: "wrapper.rows",
        page: function () { return 1; },
        total: function () { return 1; },
        repeatitems: false
    }
    

    方法getVaueByName将被定义为

    var getVaueByName = function (cells, colName) {
            var i, count = cells.length, item;
            for (i = 0; i < count; i += 1) {
                item = cells[i];
                if (item.colname === colName) {
                    return item.value;
                }
            }
            return '';
        };
    

    【讨论】:

    • 为什么 JSON 输入中“cells”属性的值是对象而不是数组? - 我尝试将其作为数组但使用上面的 colModel 未显示数据.请参阅标题“JSON 输入中单元格属性的值作为数组” 标题下的更新帖子
    • 您如何想象将更多列放置为一列? - 请查看我在标题下更新的帖子 “放置多个列以及为什么添加过滤器的建议”。是的,我无法拥有超过 1 列并根据 colModel 显示数据
    • @SK11:如果您使用"cells":{},则cells 将是具有属性的object。所有属性都必须有不同的名称。您当前的 JSON 有问题。如果您使用"cells":[]cells 将是 array 并且您可以拥有具有相同属性的项目,但使用 {"cell":{ "value":"Mark", "colname": "fname"}} 作为项目将是语法错误,以下是可能的:@987654339 @.
    • @SK11:另一方面,您可以以更紧凑的方式放置相同的信息,例如{"columns": ["fname", "lname", "emptype"], "values": ["Mark", "Strong", "Hourly"]}
    • 我将 JSON 结构更改为 {"cells": [ {"value": "Mark", "colname": "fname"}, {"value": "Strong", "colname": "lname"}, {"value": "Hourly", "colname": "emptype"}]}jsonMap:cells.value 不工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2013-11-03
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多