Knockout.js计算了数组属性

时间:2014-06-12 09:03:24

标签: javascript knockout.js

我有一个KnockoutViewModel ViewData ,它有一个数组。使用$ post从服务器读取这些项目。

现在,每个都有 id 链接字段。 id可以通过组合框在ui中更改。当id改变时,我想更新链接。

为此我将 id属性重新指定为可观察,并将链接属性创建为计算

结果是计算出的事件被引发。但我不知道如何正确引用链接字段。使用项目引用,我总是得到在for循环中处理的最新元素。

    $.post(url,
        function (data, status) {

            for (var index = 0; index < data.length; ++index) {
                item.Id = ko.observable(data[index].Id);
                item.Link = ko.computed(function () {
                    return  url.replace(urlTemplate, item.Id());;
                });
            }
            self.items(data);
        });
}

我还尝试创建一个 ItemModel 来表示该项并将每个服务器元素转换为一个新的ItemModel,但是我会在每个条目中看到最后一项的数据。

我在做错了什么?

  $.post(url,
                function (data, status) {
                    var items = $.map(data, function (item) { return new ItemModel(item) });
                    self.items(items);
                });

1 个答案:

答案 0 :(得分:1)

尝试为for循环中的每个创建一个新项目对象。像这样的东西,

self.items = ko.observableArray();
for (var index = 0; index < data.length; ++index) {
       var item = {
           Id: ko.observable(data[index].Id),
           Link: ko.computed(function () {
                 return url.replace(urlTemplate, data[index].Id);
           });
       };
self.items.push(item);
}