2016-01-22 60 views
0

我有一个视图模型正在初始化其他地方。不能使用可计算的淘汰赛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值我看不到。所以我不确定为什么我的计算值不起作用。我已经在这个顶部创建了可观察的事物。

self.paymentPlan = ko.observableArray(); 

所以,我需要知道我可以把那个计算值total_remaining,因为我现在还不能看到它。

回答

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