【问题标题】:knockout.js observable only updates on array pushknockout.js 仅在数组推送时可观察到更新
【发布时间】:2016-03-13 03:22:53
【问题描述】:

我正处于学习淘汰赛的迷雾中,并且卡在某些功能上

我有一个 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);
        });

【问题讨论】:

  • 为什么你需要一个额外的 observable 来存储 total ?直接返回总数并绑定getTotals查看。来到您的更新部分,它应该会顺利进行。与您的问题有关的样本会有所帮助。仅供参考 item.productPrice() 不需要 unwrapObservable 就可以像这样简单地展开 `total += parseFloat(item.productPrice());` 干杯
  • 谢谢你是对的 productPrice 坚持单价而不是计算价格,感谢 unwrapObservable 指针,让事情变得更简单。

标签: javascript knockout.js


【解决方案1】:

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

“为什么你需要一个额外的 observable 来存储总计?直接返回总计并绑定 getTotals 以查看。进入你的更新部分它应该会顺利进行。你的问题的示例会很有帮助。仅供参考 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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 2018-12-22
    • 2021-09-06
    • 2019-12-16
    • 2013-02-03
    • 2014-04-13
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多