为啥 kendo Ui -grid date 排序不正确?
Posted
技术标签:
【中文标题】为啥 kendo Ui -grid date 排序不正确?【英文标题】:Why kendo Ui -grid date is not sorting properly?为什么 kendo Ui -grid date 排序不正确? 【发布时间】:2016-12-18 04:57:17 【问题描述】:值为 ReinsDepositAmount
**
输出
**
我最近在剑道 UI 网格中存储了一个应用程序日期排序。
在剑道网格中,列名是这样定义的
ReinsDepositDate
的传入值 - 月、日、年格式。 08-23-1991
字段名称为 ReinsDepositDate:
field: "ReinsDepositDate", type: "date", title: "Due Date",format: "0:M/d/yyyy", width: 100, filterable:
cell:
operator: "contains"
,
当对日期进行排序时,它的排序基于第一个值
-
1/12/1994
23/1/2015
1992 年 13 月 1 日
表示在上升时我正在获取
-
1/12/1994
1992 年 13 月 1 日
23/1/2015
所以我放了模式模型
不过,我得到了相同的结果。
schema:
model:
fields:
ReinsDepositDate: type: "date",format: "0:dd/MM/yyyy"
,
我看过很多小提琴演示,这里没有任何效果:
参考: http://fiddle.jshell.net/NqrDS/light/ Kendo grid date column not formatting
设计流程:
设计流程是使用 Angular Http 服务通过 API 从 DB 中获取值,并将响应分配给剑道网格中的数据源。当我使用 JSON 文件进行演示时,它工作正常。但同样的事情在这里适用意味着不工作。所以我去自定义javascript进行排序。列:[$scope.grdPrmiumDepositCol, –
kendo 可排序属性中的自定义 javascript 可以解决问题。 这部分工作正常。
field: "ReinsDepositDate", format: "0:MM/dd/yyyy",type:"date", sortable: compare: function (a, b)
var c = new Date(a.ReinsDepositDate);
var d = new Date(b.ReinsDepositDate);
return c - d;
`
],
我的问题是为什么我这样做,因为剑道被赋予了日期格式,并且当我尝试使用 JSON 文件传输读取的示例演示时,剑道格式可以正常工作。还是一头雾水。
【问题讨论】:
【参考方案1】:根据提供的信息,尚不清楚排序是在客户端还是在服务器上进行的。
如果排序是由 Kendo UI DataSource 在客户端完成的,那么日期值应该以正确的格式提供,以便 Kendo UI 将它们解析为 JavaScript Date 对象。可以解析多种不同的格式,但dd-MM-yyyy
不是其中之一。
这是一个示例,它演示了上述内容。您会注意到未解析日期的空行。
http://dojo.telerik.com/UcEXO/2
一般来说,建议使用公认的标准对日期进行序列化:
https://***.com/a/15952652/3086237
如果在服务器上进行排序,那么 Kendo UI 与问题无关,您应该调试服务器端的实现。
【讨论】:
设计流程是使用angular http服务通过api从db获取值,并将响应分配给剑道网格中的数据源。当我使用 json 文件进行演示时,它工作正常。但是同样的事情在这里应用意味着不起作用。所以我去自定义javascript进行排序。 列:[$scope.grdPrmiumDepositCol, 我也尝试过这种不同的格式,但没有任何效果,因为我认为它仍然作为字符串,排序在客户端。所以我把自定义的javascriptfield: "ReinsDepositDate", format: "0:MM/dd/yyyy",type:"date", sortable: compare: function (a, b) var c = new Date(a.ReinsDepositDate); var d = new Date(b.ReinsDepositDate); return c - d;
`
是的,您的屏幕截图i.stack.imgur.com/WnR3b.png 清楚地表明日期实际上是 Kendo UI 数据源中的字符串。在解决此问题之前,内置排序无法正常工作。您可以将您的实现与 Kendo UI 站点上的示例和此线程中的示例进行比较。我不认为自定义排序是最好的方法,因为过滤和编辑也会遇到同样的问题。
好的,感谢您的回复。还有一个困惑是它在这个演示中如何作为字符串工作。是否有任何替代方法最适合这里。 [链接]fiddle.jshell.net/NqrDS/light 和 [链接]jsfiddle.net/mackry/rbmaz
这些示例中的日期被 Kendo UI DataSource 成功解析,因此在 Grid 中构造和使用 JavaScript Date 对象。我相信我在上面的回复中已经触及了这个话题【参考方案2】:
您可以尝试从响应中解析日期。
http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-schema.parse
schema:
parse: function(response)
for (var i = 0; i < response.length; i++)
response[i].ReinsDepositDate = kendo.parseDate(response[i].ReinsDepositDate, "dd/MM/yyyy");
return response;
希望这会有所帮助。
【讨论】:
以上是关于为啥 kendo Ui -grid date 排序不正确?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC Kendo UI Edit Popup Internet Explorer Date Edit Problems