Knockout JS - 不是函数错误

时间:2015-07-22 18:27:15

标签: knockout.js

我的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,这就是它与输入标签绑定的原因。

1 个答案:

答案 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
 }
});