У меня есть массив «пользователей» в наблюдаемом массиве KnockoutJS. Я могу добавить пользователей в массив, и он корректно обновляет представление, но редактирование пользователей в настоящее время приводит меня в бешенство, возможно, из-за небольшого отсутствия понимания базовой концепции с моей стороны.Обновить элемент массива в нокауте js
вид Модель
var viewModel = {
users: ko.observableArray(),
user: ko.observable(),
showEditForm: function (model) {
if (!$('#users-form').is(':visible')) {
$('#mask').show();
}
showUsersLoading();
loadUserIntoEditForm(model.Id);
},
getUser: function (userId) {
for(var i = 0; i < this.users().length; ++i)
{
if (this.users()[i].Id === userId)
{
this.user(this.users()[i]);
break;
}
}
}
};
пользователя Посмотреть Модель (это в основном используется для функциональных возможностей добавления в данный момент)
var userViewModel = function (id, username, statusDescription, email) {
var self = this;
self.Id = ko.observable(id),
self.Name = ko.observable(username),
self.StatusDescription = ko.observable(statusDescription),
self.Email = ko.observable(email)
};
Обновления/редактирование выполняется в частичном виде MVC, который выстреливает ajax-запрос для обновления пользовательского сервера, затем при успешном ответе, выполняется следующий код для обновления пользователя
viewModel.getUser(result.Id);
viewModel.user().StatusDescription('locked');
viewModel.user().Name('testingUpdate');
Который дает мне Uncaught TypeError: string is not a function
Ошибка
Здесь я понимаю, что не в порядке. Я понимаю, что пользователь, которого я захватил из массива users, не имеет наблюдаемых свойств, поэтому я не могу обновить его с помощью метода функции Knockout, я подтвердил это, вытащив детали массива пользователей в окно консоли браузера.
Я также знаю, что, концептуально, я хочу, чтобы пользовательский наблюдаемый объект был привязан к объекту userViewModel, поэтому свойства становятся видимыми, и я могу их обновить; или я хочу, чтобы пользователи наблюдаемого массива знали, что объекты, которые он содержит, должны иметь тип userViewModel, поэтому свойства объекта наблюдаемы.
Проблема, с которой я сталкиваюсь, хотя я понимаю концепцию, я не могу понять код, чтобы заставить его работать.
Спасибо за ответ, но я все еще получаю ту же ошибку. Одним из небольших изменений, которые мне пришлось внести в ваш код, был пользователь (this.users()); просто заполнил пользовательский объект полным списком пользователей, поэтому я изменил его на пользователя (this.users() [i]); –