2

upshot.jsはDateTimeオブジェクトをどのように処理しますか?

「通常の」文字列を作成するだけで、実際のJS日付オブジェクトを作成しないようです。

JSONの日付の書式設定とMVCに関連するすべての問題については、すでにここで説明してい ます。Asp.NetMVCとKnockoutJSを使用した日付の処理

そのため、MVCのデフォルトのJSONフォーマッターをJSON.Netに変更した後でも、現在までの自動変換は実行されません。残念ながら、Dateオブジェクトを内部で作成するには、すべてのバインディングを「手動で」実行する必要があります。JSON.Net形式の日付から新しいDate(文字列)アプローチでは、コンストラクターが日付形式文字列を完全に処理できるため、問題なく機能するようです。

ノックアウトのバインディングですべての異なる値型を処理するために使用できる「一般的な」ライブラリはありますか?

4

1 に答える 1

3

jsonには日付のデフォルト形式がないため、これは古い話です。さらに、.Net(asp.netだけでなく.Net)のふりをした/ Date(.....)/の形式は、最新のすべてのブラウザーで許可されているjsonのカスタマイズでも簡単に処理できません。

  1. 最初の問題は、/ Date(.....)/形式がブラウザーのjson解析関数によって理解されないことです。これは、Json解析をカスタマイズすることで簡単に解決できます。ネット上にはたくさんのパッチがあります。
  2. 日付をサーバーに送り返すときにも同じ問題が発生します。ただし、この場合、JSON.stringifyメソッドはjsonシリアル化をカスタマイズする関数を受け入れる一方で、各日付を文字列 "/ Date(.....)/"に変換する関数を渡すと、パッチを適用するのが非常に困難になります。 ..次に、stringify関数ADD furteh \を変換して、「\ / Date(.....)\ /」に変換します。つまり、\ char ....をエスケープしますが、この方法で変換された文字列は、 dotnet。一方、日付を/ Date(.....)/ ...に変換すると、エスケープ文字が追加されないため、この場合も間違ったエンコーディングが取得されます。
  3. また、上記の問題を解決した場合...ラウンドトリップサーバー/クライアント/サーバーの後、日付が変更されて返されます。具体的には、タイムラインオフセットが元の日付から差し引かれます...これは、.Netとブラウザがタイムラインを処理する方法が異なるためです。
  4. upshotはブラウザのJSON.stringify関数を呼び出すだけなので、日付をカスタマイズする余地はありません。

Mvc Controls Toolkitプロジェクト(私はのコーディネーター)のクライアントブロック機能を使用する場合は、問題1と2を自動的に処理する「拡張」ノックアウトを使用できます。数日以内にリリースされる次のリリースでも追加します問題3の自動処理。ただし...これはupshotの問題を解決しません...upshotがサーバーにデータを送り返すためにupshotで使用されないknokoutマッピングプラグインのマッピング関数をフックしたためです...そしてupshotはJSON.stringifyを直接呼び出すため、問題を修正する方法はないようです...データを投稿するときにjsonカスタム形式を処理するようにupshotを変更する以外に。

クライアントブロックのupcomigリリースでは、適切な日付を処理するupshotと「同様の」ジョブを実行するUpdateManagerクラスを提供します...ただし、これはまったく異なる更新戦略を使用するため、upshotの代わりにはなりません...そして単なるオプションであり、代替ではありません。したがって、upshotの最終リリースで、データのjsonフォーマットをカスタマイズできるようになることを願っています。

于 2012-03-27T13:25:58.723 に答える