2017-06-15 65 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