Macht ko.toJSON() mit Daten arbeiten?
Ich bin mit knockoutjs auf eine asp.net mvc Seite. Ich bin mit ajax zu bestehen, ein Formular wieder auf dem server durch den Aufruf ko.toJSON(viewModel)
- und dann die Buchung der Ergebnisse zurück an den server mithilfe von jQuery. Alle Eigenschaften auf die Ansicht Modell erfolgreich serialisiert werden, außer für die Javascript-date, die persistent ist als ein leeres Objekt.
Erklärung:
var viewModel = {
startTime: ko.observable(),
type: ko.observable(),
durationInMinutes: ko.observable(),
notes: ko.observable()
};
Daten Speichern:
var postData = ko.toJSON(viewModel);
$.ajax({
url: "/data",
type: "POST",
data: postData,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function () {
console.log('success!');
},
error: function () {
console.log('fail!');
}
});
Die Konsole.log-Wert von viewModel.startTime() ist:
Date {Tue May 10 2011 11:30:00 GMT-0500 (Central Daylight Time)}
Nach Zeile 1 von Daten Speichern, den Wert von postData:
{
"startTime": {},
"type": "1",
"durationInMinutes": "45",
"notes": "asfasdfasdfasdfasdfasdfasdfas",
"displayableStartTime": "10-May 11:30"
}
Wenn ich das erweitern der Linie 1 von Daten Speichern zu
var jsonEvent = ko.toJS(viewModel);
jsonEvent.startTime = viewModel.startTime();
var postData = JSON.stringify(jsonEvent);
Den Wert von postData:
{
"startTime": "2011-05-10T16:30:00.000Z",
"type": "1",
"durationInMinutes": "45",
"notes": "asfasdfasdfasdfasdfasdfasdfas",
"displayableStartTime": "10-May 11:30"
}
Kann mir jemand erklären, was könnte Los sein und wie könnte ich in der Lage sein zu bekommen, knockoutjs zu behandeln, wird dem date-Objekt?
- Es ist ein Thema, angemeldet für diesen einen hier: github.com/SteveSanderson/knockout/issues/55. Sind Sie okay mit dem format in Ihrem letzten Beispiel?
- Ausgezeichnet. Danke! Wrt-format, du meinst die volle SaveData oder die Linie 1 ausbau der SaveData? Ich bin neu in jquery, ajax, und knockoutjs, so wenden Sie sich bitte pass auf alle Ratschläge, die Sie haben könnten. Die Linie 1 Erweiterung ist im Grunde eine Implementierung aus Unwissenheit (wir Rahmen seine Sache tun und dann korrigieren Sie die unzulässiger Wert).
- Ja, wenn das der Wert, den Sie wollen, dann ist die Antwort unten wäre ein weiterer Weg, es zu tun. Viel Glück!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angesichts der aktuellen Ausgabe mit ko.toJS und Termine, eine Möglichkeit wäre das erstellen einer dependentObservable mit dem realen Wert, den Sie wollen, dass der server befassen sich mit.
Etwas wie:
Nun, wenn Sie rufen
ko.toJSON
erhalten Sie diestartTime
mit dem richtigen Wert, den der server verwenden könnte.Für ältere Browser, so etwas wie json2.js umfassen würde .toJSON für Date-Objekte.
Hatte ich ein problem mit
ko.toJSON()
dass Sie mir ein schlechtes Datum-format beim Datum warDateTime.MinValue
.Obwohl wahrscheinlich nicht ein fix für dein problem, dieser fix funktioniert für meine
ko.toJSON()
Datum problem:ASP.Net WebMethod schlägt fehl, weil ein ko.toJSON() erzeugt unterschiedliche Ergebnisse für DateTime.MinValue