我有一个简单的DataTables网格,其中包含日期列。我为JSON数据集中的日期提供了两个值,一个用于显示和一个专门设计,以便DataTables可以进行排序。我的Web应用程序允许用户选择一堆不同的日期格式,因此它需要灵活。
这是我的JSON数据,DataTables通过sAjaxSource从Web服务器获取。
- {
- Reports : [
- { Date: { Sort = "20101131133000",Display : "11/31/2010 1:30 PM" } },{ Date: { Sort = "20100912120000",Display : "1200 EST 2010-09-12" } },]
- }
很容易告诉DataTables根据Date.SortValue属性进行排序,并使用fnRender()使用户可以看到Display属性。所以这让我中途到达我的目标。
- var dataTableConfig = {
- sAjaxSource: "/getreports",sAjaxDataProp: "Reports",aoColumns: [
- { mDataProp: "User" },{ mDataProp: "Date.Sort",bSortable: true,sName: "Date",bUseRendered: false,fnRender: function (oObj) {
- return oObj.aData[oObj.oSettings.aoColumns[oObj.iDataColumn].sName].Display;
- }
- }
- ]
- };
这是我的问题我想允许用户根据显示的值输入过滤器(使用DataTables提供的内置过滤器输入),但不能。
例如。如果用户输入“EST”,它们将得到零结果,因为数据表基于mDataProp中指定的值进行过滤,而不是基于从fnRender返回的值。
任何人都可以帮我弄清楚如何排序和过滤日期列?谢谢。
解决方法
这是一个老帖子,但希望这将有助于别人来到这里。
在最新版本的DataTables中,不推荐使用bUseRendered和fnRender。
mRender
是做这种事情的新方式,有一个略有不同的做法。
你可以解决你的问题:
- ...
- { mDataProp: "Date.Sort"
- bSortable: true,// this will return the Display value for everything
- // except for when it's used for sorting,// which then it will use the Sort value
- mRender: function (data,type,full) {
- if(type == 'sort') return data.Sort;
- return data.Display
- }
- }
- ...