我有一个我读过的JSON数组,现在我想让数组中的每个对象都是一个可观察的KO,以便它可以映射到函数
function Person(data)
{
this.name = ko.observable(data.name);
this.age = ko.observable(data.age);
this.link = ko.observable(data.link);
}
function ViewModel()
{
var self = this;
self.Persons = ko.observableArray([]);
var JSONdataFromServer;
$.getJSON('http://127.0.0.1:8080', function(data) {
self.Persons(data);
for(var k in self.Persons) {
k = $.map(k, function(item) { return new Person(item) });
}
});
}
然而,当我运行这段代码时(这只是它的一部分)我在'运算符中得到错误“不能使用'来搜索G中的'0'。我想要做的就是将Persons数组中的JSON对象转换为Person KO可观察对象。
答案 0 :(得分:0)
self.Persons
是一个observableArray,所以如果你想查看它的内容,你需要调用它:
for (var k in self.Persons())
你正在做的其他事情让我感到困惑。要将JSON对象转换为Person
的observableArray,你可能会做这样的事情(取决于数据的样子 - 你不说):
$.getJSON('http://127.0.0.1:8080', function(data) {
var arrayOfPersons = ko.utils.arrayMap(data, function (item) {
return new Person(item);
});
self.Persons(arrayOfPersons);
});
答案 1 :(得分:0)
避免手动映射来自服务器的传入数据。请使用ko mapping plugin。一旦viewModel开始增长,维护客户端viewModel与来自服务器的数据同步非常困难,最好将其用于ko映射,如果您需要更多地控制映射应该如何工作,这也非常灵活。