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!
InformationsquelleAutor Jason | 2011-05-09
Schreibe einen Kommentar