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