KO计算变量不会更新

时间:2017-02-05 19:11:18

标签: javascript html5 knockout.js

我有一些我正在研究的代码,它是更大的预算应用程序的一部分。此位允许用户输入一些重复出现的每周费用,应用程序将根据输入计算每月总计。除了在编辑现有条目时更新表中的月度金额外,一切正常。删除功能可以更新每月总费用,添加新条目也是如此。

表格中的每周金额来自self.weeklyExpense = new weeklyExpense();。使用以下外部函数创建此对象。

function weeklyExpense(data) {
      if (!data) {
        this.name = ko.observable();
        this.weeklyAmount = ko.observable('0.00');
        this.monthlyAmount = ko.observable('0.00');
      } else {
        this.name = ko.observable(data.name);
        this.weeklyAmount = ko.observable(data.weeklyAmount);
        this.monthlyAmount = ko.computed(function() {
          console.log(data.weeklyAmount);
          var temp = data.weeklyAmount;
          return total = (Number(temp) * 4.4).toFixed(2);
        })
      }
    }

我已将问题缩小到this.monthlyAmount = ko.computed变量,当monthlyAmount更改时,它不会更新。我已在调试器中验证weeklyAmount正在更改但计算变量未更新。任何帮助将不胜感激。

以下是工作JS Fiddle示例的链接。

1 个答案:

答案 0 :(得分:2)

您正在引用错误的属性:data.weeklyAmount不是可观察的,因此您的计算结果不会更新。

您需要使用的是this.weeklyAmount()

this.monthlyAmount = ko.computed(function() {
  var temp = this.weeklyAmount();
  return total = (Number(temp) * 4.4).toFixed(2);
}, this);

请注意第二个参数this,它使this指向正确的对象inside your computed(如果您未使用self模式,则需要ViewModel })

演示JSFiddle