不能使用可计算的淘汰赛js

时间:2016-01-22 09:56:52

标签: javascript knockout.js

我有一个正在初始化的视图模型。

function PaymentPlanViewModel(root /* root not needed */, item) {
var self = this;
    self.instalmentnbr = item.instalmentnbr;
    self.Abbreviation = item.Abbreviation;
    self.duedate = item.duedate;
    self.capital_payment = ko.observable(item.capital_payment);
    self.interest_payment = ko.observable(item.interest_payment);
    self.overdue_payment = ko.observable(item.overdue_payment);
    self.total_payment = ko.observable(item.total_payment);
    self.capital_paid = ko.observable(item.capital_paid);
    self.interest_paid = ko.observable(item.interest_paid);
    self.overdue_paid = ko.observable(item.overdue_paid);
    self.total_paid = ko.observable(item.total_paid);
    self.INSERT_DT = item.INSERT_DT ;
};

    self.total_remaining = ko.computed(function() {
        var sum = 0;
        sum += parseFloat(self.total_payment) - parseFloat(self.total_paid);
        return sum.toFixed(2);
    });

    self.getPaymentPlan = function (request_orig_id) {
    $.ajax({
        type: 'POST',
        url: BASEURL + 'index.php/moneyexchange/getPaymentPlanForRequest/' + auth,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        data: ko.toJSON({
            request_orig_id : request_orig_id
        })
    })
    .done(function(data) {
        self.paymentPlan.removeAll();
        $.each(data, function (index, item) {
                // self.paymentPlan.push(item);
                self.paymentPlan.push(new PaymentPlanViewModel(self, item));
            });
            self.nextDueDate(self.paymentPlan()[0].duedate);
            })
    .fail(function(xhr, status, error) {
        alert(status);
    })
    .always(function(data){                 
    });
};

此视图模型正在此处初始化,

// Initialize the MoneyBorrowedViewModel view-model.
        $.getJSON(self.borrowmoneyUri, function (borrowedmoney) {
            $.each(borrowedmoney, function (index, money) {
                self.moneyborrowed.push(new MoneyBorrowedViewModel(self, money));
            });

            // holds the total moneyinvested count
            self.TotalNumberOfMoneyborrowed(self.moneyborrowed().length);
            // initialize the Money Requests and Offers available table
            self.searchMoneyborrowed();
            /* Read the payment plans for the frst request */
            self.getPaymentPlan(self.moneyborrowed()[0].ORIG_ID);

            self.lastDueDate(self.moneyborrowed()[0].Due);
          });

所以我试图在paymentPlanView模型中使用一个计算函数来获取两个值并在这样的表上使用它们

<tbody data-bind="foreach : paymentPlan" >
                        <tr>
                            <td class="text-center"><span data-bind="text: $data.duedate" ></span></td>
                            <td class="text-center"><span data-bind="text: $data.total_payment" ></span></td>
                            <td class="text-center"><span data-bind="text: $data.interest_payment" ></span></td>
                            <td class="text-center"><span data-bind="text: $data.capital_payment" ></span></td>
                            <td class="text-center"<span data-bind="text: $data.total_remaining" ></span></td>
                        </tr>
                    </tbody>

表中显示了所有其他值,只有我看不到的total_remaining值。所以我不确定为什么我的计算值不起作用。我已经像这样在顶部创建了observable。

self.paymentPlan = ko.observableArray();

所以我需要知道如何将计算值total_remaining,因为我现在看不到它。

1 个答案:

答案 0 :(得分:1)

你需要记住Knockout observables是函数。因此,要获得可观察量的值,您需要“调用”可观察量。您的计算需要更改为:

self.total_remaining = ko.computed(function() {
    var sum = 0;
    sum += parseFloat(self.total_payment()) - parseFloat(self.total_paid());
    return sum.toFixed(2);
});

注意我正在使用total_paymenttotal_paid的函数调用语法。