javascript - knockout.js observable 仅在数组推送时更新

标签 javascript knockout.js

我正处于学习 knockout 的迷雾中,并且停留在某些功能上

我有一个 observable 来根据 Observable 数组中的值计算总计。不幸的是,它仅在推送或删除时更新,但我希望它也在替换时更新,当我更新数组中某个对象的属性时,是否有某种方法可以手动触发更新?

        self.basketTotal = ko.observable();
        self.basketItems = ko.observableArray([]);

        self.getTotals = ko.computed(function(){
             var total = 0;
             ko.utils.arrayForEach(self.basketItems(), function(item) {
                 total += parseFloat(ko.utils.unwrapObservable( parseInt( item.productPrice() )) );
             });
            self.basketTotal(total);
        });

最佳答案

@supercool 对最初帖子的评论是正确的答案

“为什么你需要一个额外的可观察值来存储总计?直接返回总计并将 getTotals 绑定(bind)到 View 。来到你的更新部分,它应该会顺利进行。针对你的问题的示例会很有帮助。仅供引用 item.productPrice() 确实展开不需要 unwrapObservable 保持简单,就像这样 `total += parseFloat(item.productPrice());"

             var total = 0;
             ko.utils.arrayForEach(self.basketItems(), function(item) {
                 total += parseFloat( parseInt( item.productQtyPrice() ) );
             });

            self.basketTotal(total);

为了回答有关额外可观察量的问题,我使用它来计算折扣和税收等各种事物,因此从示例代码中排除了一些步骤,以使手头的问题更清晰,目前的问题只是进行了错误的计算(从技术上讲,这是工作代码), super 酷的评论有助于指出这一点。

关于javascript - knockout.js observable 仅在数组推送时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151954/

相关文章:

javascript - 为什么我的圆形按钮从 Bootstrap 3 转到 Bootstrap 4 时会损坏?

javascript - Knockout JS 中带有下拉列表的数组

javascript - 创建依赖于 'tree' 可观察对象的 Knockout 绑定(bind)处理程序

javascript - knockoutJS 不会将 Json 转换为 observable

javascript - 动态更新后自动在 knockout 绑定(bind)处理程序中应用 masonry

javascript - Node.JS - 简单的 Socket.IO 示例不起作用。获取调试 - 提供静态内容/socket.io.js (Mac OSX/Localhost)

javascript - Javascript 中的 YouTube 直播

javascript - 如何更改 tr 的背景颜色

javascript - 拒绝显示,将X-Frame-Options设置为SAMEORIGIN

javascript - knockout 值绑定(bind)到 HTML5 日期选择器 (Chrome)