knockout.js只能观察到数组推送的更新

时间:2015-12-08 09:14:01

标签: javascript knockout.js

我正处于学习淘汰赛的迷雾之中,并坚持使用某些功能

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

1 个答案:

答案 0 :(得分:1)

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

"为什么你需要一个额外的observable来存储总数?直接返回总数&绑定getTotals进行查看。来到你的更新部分它应该顺利。您的问题样本会有所帮助。 FYI item.productPrice()执行unwrap不需要unwrapObservable保持简单,就像这个`total + = parseFloat(item.productPrice());"

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

            self.basketTotal(total);

要回答关于额外可观察量的问题,我会用它来计算各种各样的东西,比如折扣和税收等等,所以从示例代码中排除了几个步骤,以便稍微解决问题更清楚的是,手头的问题只是错误的计算(技术上它是工作代码)和超级冷却评论有助于指出这一点。