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))
Ответ 3
Вы посмотрели на плагин для отображения нокаутов?
var unmapped = ko.mapping.toJS(viewModel);