javascript - Knockout.js 计算数组属性

标签 javascript knockout.js

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

现在这个项目都有一个id和一个链接字段。可以通过组合框在 ui 中更改 id。当 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);
                });

最佳答案

尝试为 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);
}

关于javascript - Knockout.js 计算数组属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180395/

相关文章:

javascript - 如何避免为每个 html 文件添加 ExpressJS app.get()?

javascript - 以编程方式显示基于 IP 国家/地区的 Div

javascript - 查找最新更新json的有效算法

javascript - knockout : show HTML - fill HTML

javascript - KnockoutJS 清除函数内的 Observable

javascript - 如何将可观察到的 knockout 与 jquery barrating 插件连接起来?

javascript - Highcharts,更新图表中的系列数时没有动画

javascript - 延迟 Ajax 提交

javascript - 如何从knockoutjs更新对象的值?

javascript - Breeze.js + Knockout.js 教程