Knockout имеет две служебные функции, называемые ko.toJS
и ko.toJSON
.
var myPlainObject = ko.toJS(root)
, которые пройдут по вашему объекту и превратят все наблюдаемые в обычное свойство JavaScript.сделайте то же самое, а затем выполните JSON.stringify
для результата.
Таким образом, вы можете использовать эти функции в вашей viewModel для получения простых объектов JavaScript.
Информация из документов здесь .
Если элементы в вашем observableArray не содержат observables, то вы можете просто получить базовый массив, выполнив myObservableArray()
Обновление: на основе комментариев.Это прекрасно работает для меня:
var viewModel = {
items: ko.observableArray(["one", "two", "three", "four"]),
sendItems: function() {
$.ajax({
type: "POST",
url: "@Url.Action("Test")",
data: ko.toJSON(viewModel.items),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
if (data) {
alert(ko.toJSON(data));
}
}
});
}
};
Против действия типа:
//just echo back data
public JsonResult Test(List<String> myList)
{
return Json(myList);
}
Это соответствует тому, что вы пытаетесь?