保存时日期格式错误
Date format wrong on save
我需要一点帮助,我创建了一个网格,除了当我编辑行并单击保存时,大部分情况下都运行良好;订单日期发生了巨大变化,我看不到模式来弄清楚如何解决它。我已经更改了 srcformat
和 newformat
参数,我还尝试了一大堆不同的东西,但似乎都不起作用。有人可以看看我的 fiddle 并告诉我那个日期发生了什么事吗?
为了测试 fiddle 请选择一行然后单击编辑(铅笔图标)然后在数量和原因字段中输入 4 和一些乱码,单击保存,查看订单日期,它从默认日期更改为某个随机日期。我正在使用最新版本的 free-jqgrid (4.12.1)
https://jsfiddle.net/y3llowjack3t/8zs1q7Lm/1/
{
name: 'OrderDate', index: 'OrderDate', width: 90, align: "center",
search: true, searchoptions: { sopt: ['eq', 'bw', 'bn', 'cn', 'nc', 'ew', 'en'] },
formatter: 'date', formatoptions: { newformat: 'm/d/Y' },
editable: true, editrules: { required: true, date: true },
editoptions: { dataInit: function (elem) { $(elem).datepicker(); } }
},
谢谢!
您代码中的主要问题是不在日期 列中,而是在您使用的aftersavefunc
函数中。如果您只是评论回调函数,您会看到免费的 jqGrid 正确保存了数据:https://jsfiddle.net/OlegKi/8zs1q7Lm/3/.
我建议您对当前代码进行一些更改。首先你应该修复rowids。输入数据的 RecurringOrderId
属性 似乎是唯一的。这是 rowid 值的不错选择。您应该添加 localReader: { id: "RecurringOrderId" }
因为您使用 datatype: "local"
.
更改后您将不需要使用像
这样的代码片段
var rowData = $('#editFrequencyTable').getRowData(val);
efData = $.grep(efData, function(value, i) {
return value.RecurringOrderId !== rowData.RecurringOrderId;
});
通过rowid获取数据。而不是来自所有回调的 rowid 将已经是 RecurringOrderId
值,您可以使用 $('#editFrequencyTable').getLocalRow(rowid)
通过 rowid 获取数据。 getLocalRow
方法比 getRowData
方法快得多,它获得原始项目的 所有属性 。因此您不需要使用任何隐藏列。您可以只从 colModel
中删除列(RecurringOrderId
、PONumber
和 Edited
),并且仍然可以访问这些属性。
一些其他选项可以直接删除 loadonce: true
、height: 'auto'
、datatype: "local"
,不存在 gridView: true
(gridview: true
是正确的,但它是默认值在免费的 jqGrid 中)。以同样的方式,您可以从所有 colModel
项和 search: true
.
中删除不需要的 index
属性
您可以使用 jqGrid 的 navOptions
、inlineNavOptions
、searching
、formDeleting
、inlineEditing
选项来提高代码的可读性。有关详细信息,请参阅 the wiki article。结果你得到像
这样的代码
https://jsfiddle.net/OlegKi/8zs1q7Lm/4/
很明显,您可以清理代码并进一步减少代码。使用正确的 rowid 和 getLocalRow
后,您可以轻松访问和修改数据。我认为你可以自己做。您可以通过使用列模板另外减少 colModel
的代码。有关详细信息,请参阅 the old article。
问题出在您的 date/time 格式上。看起来 jqGrig 期待 2016-04-01T00:00:00
而你正在传回 01/04/2016
.
修改 aftersavefunc
以包括:
aftersavefunc: function(iRow, response, options) {
// ...
currentRowData.OrderDate = moment(currentRowData.OrderDate).format();
// ...
}
我需要一点帮助,我创建了一个网格,除了当我编辑行并单击保存时,大部分情况下都运行良好;订单日期发生了巨大变化,我看不到模式来弄清楚如何解决它。我已经更改了 srcformat
和 newformat
参数,我还尝试了一大堆不同的东西,但似乎都不起作用。有人可以看看我的 fiddle 并告诉我那个日期发生了什么事吗?
为了测试 fiddle 请选择一行然后单击编辑(铅笔图标)然后在数量和原因字段中输入 4 和一些乱码,单击保存,查看订单日期,它从默认日期更改为某个随机日期。我正在使用最新版本的 free-jqgrid (4.12.1)
https://jsfiddle.net/y3llowjack3t/8zs1q7Lm/1/
{
name: 'OrderDate', index: 'OrderDate', width: 90, align: "center",
search: true, searchoptions: { sopt: ['eq', 'bw', 'bn', 'cn', 'nc', 'ew', 'en'] },
formatter: 'date', formatoptions: { newformat: 'm/d/Y' },
editable: true, editrules: { required: true, date: true },
editoptions: { dataInit: function (elem) { $(elem).datepicker(); } }
},
谢谢!
您代码中的主要问题是不在日期 列中,而是在您使用的aftersavefunc
函数中。如果您只是评论回调函数,您会看到免费的 jqGrid 正确保存了数据:https://jsfiddle.net/OlegKi/8zs1q7Lm/3/.
我建议您对当前代码进行一些更改。首先你应该修复rowids。输入数据的 RecurringOrderId
属性 似乎是唯一的。这是 rowid 值的不错选择。您应该添加 localReader: { id: "RecurringOrderId" }
因为您使用 datatype: "local"
.
更改后您将不需要使用像
这样的代码片段var rowData = $('#editFrequencyTable').getRowData(val);
efData = $.grep(efData, function(value, i) {
return value.RecurringOrderId !== rowData.RecurringOrderId;
});
通过rowid获取数据。而不是来自所有回调的 rowid 将已经是 RecurringOrderId
值,您可以使用 $('#editFrequencyTable').getLocalRow(rowid)
通过 rowid 获取数据。 getLocalRow
方法比 getRowData
方法快得多,它获得原始项目的 所有属性 。因此您不需要使用任何隐藏列。您可以只从 colModel
中删除列(RecurringOrderId
、PONumber
和 Edited
),并且仍然可以访问这些属性。
一些其他选项可以直接删除 loadonce: true
、height: 'auto'
、datatype: "local"
,不存在 gridView: true
(gridview: true
是正确的,但它是默认值在免费的 jqGrid 中)。以同样的方式,您可以从所有 colModel
项和 search: true
.
index
属性
您可以使用 jqGrid 的 navOptions
、inlineNavOptions
、searching
、formDeleting
、inlineEditing
选项来提高代码的可读性。有关详细信息,请参阅 the wiki article。结果你得到像
https://jsfiddle.net/OlegKi/8zs1q7Lm/4/
很明显,您可以清理代码并进一步减少代码。使用正确的 rowid 和 getLocalRow
后,您可以轻松访问和修改数据。我认为你可以自己做。您可以通过使用列模板另外减少 colModel
的代码。有关详细信息,请参阅 the old article。
问题出在您的 date/time 格式上。看起来 jqGrig 期待 2016-04-01T00:00:00
而你正在传回 01/04/2016
.
修改 aftersavefunc
以包括:
aftersavefunc: function(iRow, response, options) {
// ...
currentRowData.OrderDate = moment(currentRowData.OrderDate).format();
// ...
}