【发布时间】:2014-11-12 12:54:00
【问题描述】:
我在 KnockoutJS 可观察数组中有一组“用户”。我可以将用户添加到数组并正确更新视图,但用户的编辑目前让我发疯,可能是因为我对基本概念缺乏了解。
查看模型
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 函数方法进行更新的原因,我通过提取 users 数组中的详细信息确认了这一点浏览器控制台窗口。
我也知道,从概念上讲,我想将用户可观察对象转换为 userViewModel 对象,以便属性变为可观察对象,我可以更新它们;或者我希望用户可观察数组知道它包含的对象应该是 userViewModel 类型,因此对象属性是可观察的。
我遇到的问题是,虽然我理解了这个概念,但我无法弄清楚使其真正起作用的代码。
【问题讨论】:
标签: javascript jquery arrays knockout.js