繁体   English   中英

Knockout.js计算数组属性

[英]Knockout.js computed array property

我有一个KnockoutViewModel ViewData,它具有Items数组。 从带有$ post的服务器读取这些项目。

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

为此,我将id属性重新分配为可观察的并创建了计算link属性

结果,引发了计算事件。 但我不知道如何正确引用链接字段。 使用项目引用,我总是得到在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);
                });

尝试为for循环中的每个对象创建一个新的item对象。 像这样

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM