У меня есть простой MVC модель, как это:Нокаут отображение простой объект
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MobileNumber { get; set; }
public string EmailAddress { get; set; }
}
Я хотел бы отобразить один объект этого типа внутри нокаута ViewModel для того, чтобы заполнить ее:
var UserViewModel = function() {
var self = this;
self.user = ko.mapping.fromJS({});
$.getJSON("/UserManagement/CreateEmptyUser", function (data) {
ko.mapping.fromJS(data, self.user);
});
self.createUser = function (data, eventArgs) {
var user = data;
$.ajax({
type: "post",
contentType: "application/json",
data: ko.toJSON(user),
url: "@Url.Action("CreateUser")",
success: function() {
window.location = "@Url.Action("AddNew")";
}
});
};
};
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как сопоставить любой объект. Я попытался с помощью
self.user = ko.mapping.fromJS([]);
$.getJSON("/UserManagement/CreateEmptyUser", function (data) {
ko.mapping.fromJS(data,{}, self.user);
});
, который используется для массивов и пытается извлечь элемент с индексом 0, то другое решение, я думал, что будет работать это один во 2-м блоке комментариев. Все, что я нашел в google, привело меня к отображению целых массивов, но ничего не касалось простого сопоставления объектов. Есть ли правильный способ сделать это? Я хотел бы оставить модель разделенной, а не вручную описывать ее свойства в javascript.
Спасибо, Alex Barac
Спасибо за предложения. Я попробовал свой второй метод, но 'self.user' остается неопределенным после вызова метода' $ .getJSON'. Я попытался установить 'self.user = null;', но после вызова значение остается «null». Думаю, осталось только вручную отобразить свойства. –
Обычно я использую первый метод, если честно, поскольку я могу сразу применить Bindings на загрузке страницы, что полезно, когда у вас есть модели детского просмотра, которые вы не хотите связывать индивидуально.Вы также можете попробовать передать пустое отображение на карту: ko.mapping.fromJS (data, {}); и посмотреть, работает ли это. –
Он работает с первым методом, спасибо :) –