2017-06-15 37 views
0

我在jqgrid中有一个不能正确排序的日期字段。原因是因为我的第一个formatter:'date'被第二个参考formatter: function(...)覆盖。 如何保留这两项功能?jqgrid中的多个格式化程序日期选项

这里是我的代码:

{name:'FUSInvitedDateX',hidden:true,index:'FUSInvitedDateX',width:'250', 
search: true,searchoptions:{sopt:['eq','ne','lt','le','gt','ge'], dataInit: 
function(elem) {$(elem).datepicker();}},sorttype: 'date', 
formatter:'date',formatoptions: {srcformat: 'm/d/Y', newformat: 'm/d/Y' }, 
formatter: function(cellvalue, options, rowObject) { return 
highlight(cellvalue, options, rowObject, ['FUSScheduledDateX','FUSCompletedDateX','InterviewStatus_DerivedX'],'interview-invite-late');}} 

,然后在高亮功能我有这样的事情:

function highlight(cellvalue,options,rowObject,compare,color) { 
       if (cellvalue.length==0) { return cellvalue; } 
       [ evaluating code ] 
       return '<span>' + cellvalue + '</span>'; 

任何建议,将不胜感激

回答

0

很抱歉,但一个可以”在一个对象中定义具有相同名称的两个属性。另一方面,您在列定义中包含formatter属性的两倍。这是语法错误。

即使你将消除formatter:'date',并且只使用自定义格式(formatter回调函数),那么sorttype: 'date'将无法​​工作,因为jqGrid的将不能正确地解析日期。

如果您确实需要使用自定义格式化程序(回调函数),那么您应该将sorttype定义为回调函数。您可以解析sorttype函数中的输入字符串,并将其作为ISO日期(如2017-06-15)返回。

+0

感谢您的快速响应。你有没有关于如何修改上述解决方案的示例代码:a)允许过滤日期字段,并且仍然b)允许自定义格式化程序。非常感激。 – richnwilson

+0

@richnwilson:'sorttype'可以定义为回调函数,它应该返回值,在排序过程中应该使用**而不是**原始值。如果你使用'srcformat:'m/d/Y''就像2017年6月16日那么你可以将它转换为''Y-m-d''就像2017-06-16。因此'sorttype'的代码可以简化为如下形式:'sorttype:function(cellValue){var parts = cellValue.split('/');返回零件[2] +' - '+零件[0] +' - '零件[1]; }'。如果源数据可能是6/16/2017而不是06/16/2017,并且数据可能为空或未定义,则实际代码可能会更复杂一些。 – Oleg

+0

谢谢。我相信我已经解决了排序顺序,使用如下:'sorttype:function(cellValue){if(cellValue.length == 0 || typeof cellValue ===“undefined”){return false;} else {var $ parts = cellValue.split('/'); \t var $ yyyy = $ parts [2]; \t var $ m = $ parts [0] .length <2? '0'+ $ parts [0]:$ parts [0]; var $ d = $ parts [1] .length <2? '0'+ $ parts [1]:$ parts [1];返回$ yyyy +“ - ”+ $ m +“ - ”+ $ d;}} **但是**日期过滤器似乎不起作用。我尝试过布尔条件= <=, > =使用datepicker,但它只是显示空白。 – richnwilson