2012-03-26 8 views
2

Wie behandelt upshot.js DateTime-Objekte?Upshot MVC 4 Behandlung von Datum, Knockout-Bindungen

Es scheint nur seine "normalen" Zeichenfolgen zu erstellen und kein echtes JS-Datumsobjekt zu erstellen.

alle Probleme im Zusammenhang mit JSON Datumsformatierung und MVC sind hier bereits besprochen: Handling dates with Asp.Net MVC and KnockoutJS

So auch nach dem MVC-Standard JSON Formatierer JSON.Net Änderung seiner noch keine automatische Umwandlung bisher tun. Leider müssen alle Bindungen "pro Hand" gemacht werden, um intern ein Date-Objekt zu erzeugen. Mit dem JSON.Net-formatierten Datum zu neuem Datum (Zeichenkette) Ansatz scheint zu arbeiten, ok, da der Konstruktor able ist, um den Datum formatstring perfekt zu behandeln.

Gibt es eine "allgemeine" Lib für die Handhabung aller verschiedenen Werttypen in Bindungen für Knockout?

+0

Ich habe hier ein anderes Problem mit JSON.net-formatierten Daten gefunden. Wenn ich den ersetzten JSON.Net Formatierer das Datum loogs gut und könnte leicht in JS-Datumsobjekte umgewandelt werden. ABER wenn Sie die Entität zurück zum Server senden möchten - es schlägt fehl. Irgendwie scheint es, dass die Desrialisierung nicht funktioniert, wenn der Formatierer den defaultjson Formatierer ersetzt ... – Obiwan007

Antwort

3

Dies ist eine alte Geschichte, aufgrund der Tatsache, dass JSON kein Standardformat für Daten hat. Darüber hinaus gab vor, das Format /Date(.....)/ von .NET (.NET nicht nur asp.net) ist nicht leicht, auch mit der json Anpassung von allen modernen Browsern erlaubt zu handhaben:

  1. Die Das erste Problem ist, dass das Format /Date(.....)/ von der Browser-JSON-Parsing-Funktion nicht verstanden wird. Dies kann einfach durch Anpassen der Json-Analyse gelöst werden. Es gibt viele Patches im Netz.
  2. Sie haben das gleiche Problem beim Zurücksenden des Datums an den Server. In diesem Fall ist es jedoch sehr schwierig zu patchen, da die JSON.stringify-Methode eine Funktion zur Anpassung der json-Serialisierung akzeptiert, wenn Sie eine Funktion übergeben, die jedes Datum in die Zeichenfolge "/Date(.....)/" umwandelt. ..dann stringify die Funktion ADD furteh \ und transformiere sie in: "\/Date (.....) \ /", das heißt es entkommt dem \ char .... aber die auf diese Weise transformierte Zeichenkette wird nicht verstanden Punkt net. Auf der anderen Seite, wenn Sie Datumsangaben in /Date(........./...... ändern, wird kein Escape-Zeichen hinzugefügt. Auch in diesem Fall erhalten Sie eine falsche Kodierung.
  3. Auch wenn Sie die oben genannten Probleme lösen ... nach einem Round-Trip-Server/Client/Server das Datum zurückgegeben geändert. Insbesondere wird der Timeline-Offset vom ursprünglichen Datum subtrahiert ... Dies liegt an den verschiedenen Möglichkeiten, mit denen Net und Browser Timelines verarbeiten.
  4. upshot ruft nur die JSON.stringify-Funktion des Browsers auf ... damit Sie keinen Raum für das Anpassen von Daten haben.

, wenn Sie die client blocks Funktion des MVC-Kontrollen Toolkit Projekt zu verwenden (Ich bin der Koordinator) Sie einen „enhanced“ Knockout verwenden können, die automatisch Probleme 1 und 2. In der nächsten Version Griffe in einigen zu kommen Tage werde ich auch die automatische Behandlung von Problem 3 hinzufügen. Allerdings ... dies wird nicht lösen das Problem von upshot ... seit ich die Mapping-Funktionen des Knokout Mapping-Plugin, die nicht durch das Ende verwendet werden, um Daten zurück zu senden der Server ... und da das Ergebnis direkt JSON.stringify aufruft ... scheint es keine Möglichkeit zu geben, das Problem zu beheben ... außer das Ändern von upshot, um jsons benutzerdefinierte Formate beim Veröffentlichen von Daten zu verarbeiten.

In der upcomig-Version von Client-Blöcken werde ich eine UpdateManager-Klasse zur Verfügung stellen, die einen Job ähnlich "ähnlich" wie upshot, die richtig behandelt Daten ... Allerdings wird dies nie ein Ersatz für das Ergebnis sein, da es eine ganz andere Update-Strategie verwendet ... und ist nur eine Option MEHR kein Ersatz. Also ich hoffe, dass in der endgültigen Version von upshot die Möglichkeit sein wird, die json Formatierung von Daten anzupassen.

+0

Thx für Ihre Antwort. 1. Problem ist irgendwie leicht lösbar - ich benutze nur die JSON.Net-Lib, um das Datum im ISO-Format (nicht/Datum *) zu erstellen. So funktioniert das neue Date (String) perfekt. 2. Das Zurücksenden ist ein Problem, auf das Sie hingewiesen haben. Ich habe momentan keine Ahnung was der Client auf den Server zurückschickt. Ich überprüfe das mit Fiddler irgendwann :) Ich freue mich auf Ihre lib. Momentan ist/SPA keine Option, da es zu viele Probleme gibt. Vielleicht werde ich den direkten Ansatz bei der Erstellung des Modells über den Modellbauer von Knockout versuchen. – Obiwan007

+0

Siehe diesen Beitrag von Scott Hanselman; http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx. Am Ende des Posts verspricht er, dass in der endgültigen Version ... sie JSON.net mit WebApi versenden werden ... also wird es eine "Normalisierung" in allen js und dll geben ... die zusammen funktionieren wird –

+0

meine lib wurde auf cedeplex veröffentlicht, siehe hier: http://mvccontrolstoolkit.codeplex.com/ Unter diesem Link finden Sie Hinweise zu Codebeispielen und Tutorials. Das offizielle Dokument wird in den nächsten Tagen aktualisiert –