Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript KO计算变量将不会更新_Javascript_Html_Knockout.js - Fatal编程技术网

Javascript KO计算变量将不会更新

Javascript KO计算变量将不会更新,javascript,html,knockout.js,Javascript,Html,Knockout.js,我有一点代码,我正在工作,这是一个更大的预算应用程序的一部分。此位允许用户输入一些重复发生的每周费用,应用程序将根据输入计算每月总额。除了在编辑现有条目时更新表中的每月金额外,所有操作都正常。“删除”功能可以更新每月和每周的总费用,添加新条目也可以执行相同的操作 表中的每周金额来自self.weeklyExpense=new weeklyExpense()。此对象是使用以下外部函数创建的 function weeklyExpense(data) { if (!data) {

我有一点代码,我正在工作,这是一个更大的预算应用程序的一部分。此位允许用户输入一些重复发生的每周费用,应用程序将根据输入计算每月总额。除了在编辑现有条目时更新表中的每月金额外,所有操作都正常。“删除”功能可以更新每月和每周的总费用,添加新条目也可以执行相同的操作

表中的每周金额来自
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
正在更改,但计算变量没有更新。任何帮助都将不胜感激


这里是指向工作示例的链接。

您引用了错误的属性:
数据。weeklyAmount
不可观察,因此您的计算结果不会更新

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

请注意第二个参数
this
,它使
this
指向正确的对象(如果您没有使用
视图模型中的
self
模式)

演示

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