JSON.stringify объект с переменными JS Knockout

Текущий сценарий:

function Employee(data) {
var self = this;

// variables
this.Forename = ko.observable(data.Forename);
this.Surname = ko.observable(data.Surname);

this.Save = function () {
    var obj = JSON.stringify(self); // Without ko.observables, this works fine. self() doesn't work obviously.
    console.log(obj);
};
}

Я думаю, что то, что я пытаюсь сделать, довольно прямолинейно, получает все наблюдаемые значения, не просматривая ни один из них, и создавая строку JSON, используя функцию stringify. Это легко сделать без наблюдаемых, есть ли простой способ сделать это с ними?

Ответ 1

У нокаута есть встроенная функция toJSON, чтобы выполнить именно это:

var json = ko.toJSON(viewModel);

ko.toJSON - это создает строку JSON, представляющую ваши данные моделей моделей. Внутри он просто вызывает ko.toJS на вашей модели представления, а затем использует собственный сериализатор JSON для браузеров на результат. Примечание: для работы с более старыми браузерами, у которых нет встроенного сериализатора JSON (например, IE 7 или более раннего), вы также должны ссылаться на библиотеку json2.js.

Ответ 2

Вы можете сделать это двумя способами:

первый:

      var json = ko.toJSON(ko.mapping.toJS(viewModel))

Второе

      var json = JSON.stringify(ko.mapping.toJS(viewModel))