尝试将我的JSON数组中的对象转换/映射到我的KO可观察函数

时间:2015-10-11 18:37:29

标签: javascript arrays json knockout.js

我有一个我读过的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可观察对象。

2 个答案:

答案 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映射,如果您需要更多地控制映射应该如何工作,这也非常灵活。