如何暂停计算属性的订阅?

时间:2013-01-17 23:19:16

标签: javascript knockout.js

KnockoutJS中有没有办法暂停读/写计算可观察量的订阅?我的意思是,在特殊情况下,我不希望它受到其他属性变化的影响。

我的具体情况是我有属性:

  • .Total
  • .Discount
  • .FinalTotal

用户可以在DiscountFinalTotal输入中写入新值。如果用户更改Discount,则会重新计算FinalTotalTotal - 计算出Discount

如果用户更改FinalTotal,则会重新计算Discount。因此,如果我将它们创建为计算机,我将得到无穷无尽的事件序列:

  1. 用户更改Discount
  2. Knockout重新计算FinalTotal
  3. 由于Discount取决于FinalTotal,因此会重新计算Discount
  4. ......等等。

1 个答案:

答案 0 :(得分:0)

我不确定你的公式是什么,但这里是一个使用两个计算的observables的例子:

function ViewModel() {
    var self = this;
    self.Total = ko.observable();
    self.Discount = ko.computed(function() {
        return self.Total() * .1;
    });
    self.FinalTotal = ko.computed(function() {
        return self.Total() - self.Discount();
    });
}