我的HTML如下:
<td>Total Amount to be Paid: </td>
<td data-bind="text: invoiceAmount() + ' Kr'"></td>
<td>bill:</td>
<td data-bind="text: billAmount()"></td>
<td>Chosen Provision: </td>
<td><input type="text" data-bind="value: chosenProvision()"/> Kr</td>
JS:
self.invoiceAmount = ko.computed(function(){
var total = 0;
if(self.selectedInvoices().length > 0){
for(var p = 0; p < self.selectedInvoices().length; ++p)
{
total += Number(self.selectedInvoices()[p].invoicedArticleFinal);
}
}
return total;
});
self.billAmount = ko.computed(function(){
return self.invoiceAmount() + self.chosenProvision();
});
self.chosenProvision = ko.computed(function(){
if(self.invoiceAmount() < 750){
return "50";
} else {
return (self.invoiceAmount()*0.1);
}
});
我一直收到错误:self.chosenProvision不是一个函数。
我还希望能够从浏览器修改selectedProvision,这就是它与输入标签绑定的原因。
答案 0 :(得分:3)
要修改计算,它必须是writable computed。
您获得self.chosenProvision is not a function
的原因是self.billAmount
您正在使用的self.chosenProvision
,此时未定义。 computed
s在创建时执行(pureComputed
s不是)
要计算可写,只需将计算出的定义设为:
self.chosenProvision = ko.computed({
read: function(){
if(self.invoiceAmount() < 750){
return "50";
} else {
return (self.invoiceAmount()*0.1);
}
},
write: function (newValue) {
// Do whatever with newValue
}
});