2

upshot.js 如何处理 DateTime 对象?

看起来它只是创建“普通”字符串而不是创建真正的 JS 日期对象。

与 JSON 日期格式和 MVC 相关的所有问题都已在此处讨论: 使用 Asp.Net MVC 和 KnockoutJS 处理日期

因此,即使在将 MVC 默认 JSON 格式化程序更改为 JSON.Net 之后,它仍然没有进行自动转换。不幸的是,所有绑定都必须“手动”完成才能在内部创建一个 Date 对象。使用 JSON.Net 格式化日期到新日期(字符串)方法似乎可以正常工作,因为构造函数可以完美地处理日期格式字符串。

是否有一个“通用”库可用于处理绑定中所有不同的值类型以进行淘汰?

4

1 回答 1

3

这是一个老故事,因为 json 没有默认的日期格式。此外,.Net(.Net 不仅仅是 asp.net)伪装的格式 /Date(.....)/ 也不容易处理所有现代浏览器都允许的 json 自定义:

  1. 第一个问题是浏览器json解析函数不理解/Date(.....)/格式。这可以通过自定义 Json 解析轻松解决。网上有很多补丁。
  2. 将日期发送回服务器时,您会遇到同样的问题。但是在这种情况下,很难修补,因为虽然 JSON.stringify 方法接受一个自定义 json 序列化的函数,但如果您传递一个将每个日期转换为字符串“/Date(.....)/”的函数。 ..然后 stringify 函数 ADD furteh \ 并将其转换为:“\/Date(.....)\/”,即它转义了 \ char ....但是以这种方式转换的字符串不被理解点网。另一方面,如果您将日期转换为 /Date(.....)/...没有添加转义字符,那么...在这种情况下,您也会得到错误的编码。
  3. 此外,如果您解决了上述问题......在往返服务器/客户端/服务器之后,日期返回更改。具体来说,时间线偏移量是从原始日期中减去的……这是由于 .Net 和浏览器处理时间线的方式不同。
  4. 结果只是调用浏览器 JSON.stringify 函数......所以它没有给你自定义日期的空间。

如果您使用 Mvc Controls Toolkit 项目的客户端块功能(我是该项目的协调员),您可以使用自动处理问题 1 和 2 的“增强”淘汰赛。在几天后的下一个版本中,我还将添加问题3的自动处理。但是...这不会解决结果的问题...因为我挂钩了不被结果用于将数据发送回服务器的knokout映射插件的映射功能...和因为 upshot 直接调用 JSON.stringify ......似乎没有办法解决这个问题......除了在发布数据时修改 upshot 以处理 json 自定义格式。

在客户端块的 upcomig 版本中,我将提供一个 UpdateManager 类,它与处理正确日期的结果“相似”的工作......但是这永远不会替代结果,因为它使用完全不同的更新策略......和只是一个选项 MORE 不是替代品。所以我希望在 upshot 的最终版本中能够自定义数据的 json 格式。

于 2012-03-27T13:25:58.723 回答