我正处于学习 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/