2015-05-15 68 views
0

我有一个来自服务器的JSON响应,我试图绑定到JQgrid。但是,响应是JSON字符串具有“点”作为对象名称的一部分。我无法用“点”JqGrid无法绑定JSON数据与“点”

这里得到的jqGrid工作的问题样品拨弄我面对http://jsfiddle.net/sharathchandramg/rpdfrb0L/2/

$("#grid").jqGrid({ 
data: data, 
datatype: "local", 
height: 250, 
colNames: ['Name', 'Cluster', 'Location'], 
colModel: [{ 
    name: 'name', 
    width: 120 
}, { 
    name: 'metrics.cluster.first.value', 
    width: 60, 
    jsonmap: function (obj) { 

     return obj.metrics['cluster.first'].value 
    } 
}, { 
    name: 'metrics.location-latitude.value', 
    width: 60 
}, ], 
caption: "Example" 
}); 

如图所示的小提琴,我不能到属性“绑定cluster.first“,即使在使用jsonmap时也是如此。而如果属性名称是“位置纬度”,则网格工作正常。

让我知道我做错了什么。

+0

你可以发布模拟数据? –

+0

小提琴链接有我用于测试的样本模拟数据 –

回答

2

原因很简单。如果在jqGrid 4.6中使用datatype: "local",则属性jsonmap将被忽略。我改变了free jqGrid的行为(请参阅the wiki)。所以一个可能的解决方案是使用免费的jqGrid 4.8或更高版本而不是jqGrid 4.6。

解决问题的一个更简单的方法是使用datatype: "jsonstring"。您可以验证

$("#grid").jqGrid({ 
    datastr: data, 
    datatype: "jsonstring", 
    height: "auto", 
    colNames: ['Name', 'Cluster', 'Location'], 
    colModel: [{ 
     name: 'name', 
     width: 120 
    }, { 
     name: 'metrics_cluster_first_value', 
     width: 60, 
     jsonmap: function (obj) { 
      return obj.metrics['cluster.first'].value 
     } 
    }, { 
     name: 'metrics_location_latitude_value', 
     jsonmap: 'metrics.location-latitude.value', 
     width: 60 
    }], 
    caption: "Example" 
}); 

请参阅http://jsfiddle.net/OlegKi/rpdfrb0L/5/。你还可以看到,我更改了name所有colModel项目的属性,使其内部没有任何点。我建议始终遵守规则。

+0

此外,如果使用jsonstring,则应通过datastr属性提供数据 –

+0

@RamanathanMuthuraman:是,原因,请参阅我的答案的代码。 'datatype:“jsonstring”'的输入是'datastr',它可以包含对象而不仅仅是JSON字符串。 – Oleg

+0

谢谢,我能够使用最新的源代码工作。如果我需要动态绑定列标题和数据,同样的事情会工作吗? –