问题描述
我试图在我的jqgrid中显示日期。但是,doctrine会返回一个datetime对象,而不是jqgrid可以显示的正常字符串类型值。我可以想到两种可能的解决方案:
(1)更改doctrine的返回类型以某种方式返回一个字符串,以便jqgrid可以显示它,而没有问题。 (目前,json正在返回一个对象)
(2)使用jsonmap来操纵json(datetime作为一个对象进来,但它内部显示正确的数据)
我的代码:
(Doctrine related)
$ qb = $ this-> em-> getRepository('ProductOrderLookupBundle:Product') - > createQueryBuilder('u');
$ qb-> select('u.id,u.productName,u.productDetails,u.shipDate,u');
$ qb-> getArrayResult();
(Jqgrid相关)
jQuery(document).ready(function(){
jQuery(#list)。jqGrid({
url:{{asset('/ app_dev.php / _ $ thr,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, '产品详细信息','装运日期','动作'],
colModel:[
{name:'id',index:'u.id',width:200},
{name:'productName',index:'u.productName',width:200,editable:true},
{name:'productDetails',index:'u.productDetails',width:200,align:' right',editable:true},
{name:'shipDate',index:'u.shipDate',可编辑:true,jsonmap:function(obj){return getVaueByName(obj.cells,date); }},
{name:'actions',index:'a ctions',sortable:false,search:false}
],
其他jqgrid相关代码
var getVaueByName = function(cells,colName){
var i,count = cells。长度,项目; (i = 0; i< count; i + = 1)的
{
item = cells [i];
if(item.colname === colName){
return item.value;
}
}
return'';
};
我的json
code> {
page:1,
total:20000,
records:1000000,
rows:
[
{id:1,cell:[1,Door,Details,{date:2012-06-18 00:00:00,timezone_type时区:欧洲\\ /巴黎}]},
{id:2,cell:[2,Door2,Details2,{date 18 00:00:00,timezone_type:3,timezone:Europe \ / Paris}]},
{id:3,cell:[3,Door3 ,Details3,{date:2012-06-18 00:00:00,timezone_type:3,timezone:Europe \ / Paris}]},
{ id:4,cell:[4,Door4,Details4,{date:2012-06-18 00:00:00,timezone_type:3,timezone \\/巴黎}]},
{id:5,cell:[5,Door5,Details5,{date:2012-06-18 00:00: 00,timezone_type:3,timezone:Europe \ / Paris}]},
{id:6,cell:[6,Door6,Details6 {date:2012-06-18 00:00:00,timezone_type:3,timezone:Europe \ / Paris}]},
{id 小区:[7, Door7, Details7, {date:2012-06-18 00:00:00,timezone_type:3,timezone:Europe \ / Paris}]},
{id cell:[8,Door8,Details8,{date:2012-06-18 00:00:00,timezone_type:3,timezone:Europe \ / Paris }},
{id:9,cell:[9,Door9,Details9,{date:2012-06-18 00:00:00,timezone_type :3,timezone:Europe \ / Paris}]},
{id:10,cell:[10,Door10,Details10,{date 2012-06-18 00:00:00,timezone_type:3,timezone:Europe \ / Paris}}}
]
}
在这一切我想要的是日期列下的值。到目前为止,我已经尝试过
它使用 jsonReader:{repeatitems:false}
首先,但它使用另外 jsonmap
属性在 colModel
的每一列中:
colModel:[
{name:'id',index:'u.id',width:110},
{name:'productName',jsonmap: cell.1,index:'u.productName',width:120,editable:true},
{name:'productDetails',jsonmap:cell.2,inde x:'u.productDetails',width:120,align:'right',editable:true},
{name:'shipDate',jsonmap:cell.3.date,index:'u.shipDate ',align:center,formatter:date,editable:true,width:120},
{name:'actions',formatter:actions,width:70,align:center sortable:false,search:false}
]
值 jsonmap:cell.1
通知从单元格
属性首先读取,然后获取 1
元素单元格
。要读取日期,需要使用 jsonmap:cell.3.date
。可以使用另一种功能形式的 jsonmap
:
jsonmap:function obj){return obj.cell [1]; } //阅读productName
和
jsonmap:function(obj){return obj.cell [3] .date; } //读取日期
I'm trying to display date in my jqgrid. But doctrine is returning a datetime object instead of a normal string type value which jqgrid can display.
I can think of two possible solutions:
(1) Change doctrine's return type to somehow return a string so that jqgrid can display it without a problem. (Currently the json is returning an object)
(2) Use jsonmap to manipulate the json (The datetime is coming in as an object but it does display proper data inside)
My code:
(Doctrine related)
$qb = $this->em->getRepository('ProductOrderLookupBundle:Product')->createQueryBuilder('u');
$qb->select('u.id, u.productName, u.productDetails,u.shipDate, u');
$qb->getArrayResult();
(Jqgrid related)
jQuery(document).ready(function(){
jQuery("#list").jqGrid({
url:"{{ asset('/app_dev.php/_thrace-datagrid/data/user_management') }}",
datatype: 'json',
mtype: 'POST',
colNames:['Product ID','Product Name', 'Product Details', 'Shipment Date', 'Actions'],
colModel :[
{name:'id', index:'u.id', width:200},
{name:'productName', index:'u.productName', width:200, editable: true},
{name:'productDetails', index:'u.productDetails', width:200, align:'right', editable: true},
{name:'shipDate', index: 'u.shipDate', editable: true,jsonmap: function (obj) { return getVaueByName(obj.cells, "date"); }},
{name:'actions',index:'actions',sortable:false, search:false}
],
other jqgrid related code
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 '';
};
My json
{
"page":1,
"total":20000,
"records":1000000,
"rows":
[
{"id":1,"cell":[1,"Door","Details",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":2,"cell":[2,"Door2","Details2",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":3,"cell":[3,"Door3","Details3",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":4,"cell":[4,"Door4","Details4",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":5,"cell":[5,"Door5","Details5",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":6,"cell":[6,"Door6","Details6",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":7,"cell":[7,"Door7","Details7",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":8,"cell":[8,"Door8","Details8",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":9,"cell":[9,"Door9","Details9",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]},
{"id":10,"cell":[10,"Door10","Details10",{"date":"2012-06-18 00:00:00","timezone_type":3,"timezone":"Europe\/Paris"}]}
]
}
In this all I want is the value under date column. so far I've tried this and this . Both are front end related. I have not been able to find doctrine related solutions. I cannot use jsonReader: { repeatitems: false }
because it doesn't load my data for some reason.
This is what my current grid looks like
Any kind of solution will be appreciated.
Thanks
What you can do is something like the following: http://jsfiddle.net/OlegKi/0fvajwhp/
It uses jsonReader: { repeatitems: false }
first of all, but it uses additionally jsonmap
property in every column of colModel
:
colModel: [
{name: 'id', index:'u.id', width: 110},
{name: 'productName', jsonmap: "cell.1", index:'u.productName', width: 120, editable: true},
{name: 'productDetails', jsonmap: "cell.2", index:'u.productDetails', width: 120, align:'right', editable: true},
{name: 'shipDate', jsonmap: "cell.3.date", index: 'u.shipDate', align: "center", formatter: "date", editable: true, width: 120 },
{name: 'actions', formatter: "actions", width: 70, align: "center", sortable:false, search:false}
]
The value jsonmap: "cell.1"
inform to read first from cell
property and then get 1
element of the cell
. To read the date one need to use jsonmap: "cell.3.date"
. One can use alternatively function form of jsonmap
:
jsonmap: function (obj) { return obj.cell[1]; } // to read productName
and
jsonmap: function (obj) { return obj.cell[3].date; } // to read date
这篇关于doctrine返回datetime对象而不是date字符串,jqGrid jsonmap不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!