2017-02-05 91 views
1

我正在處理的代碼中有一部分是大型預算應用程序的一部分。該位允許用戶輸入一些重複的每週費用,應用程序將根據輸入計算每月總計。除了在編輯現有條目時更新表格中的每月金額之外,一切正在工作。刪除功能可以更新每月每週總費用,並添加一個新條目。KO計算變量不會更新

表中的每週金額來自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例子的鏈接。

回答

2

您正在引用錯誤的屬性:data.weeklyAmount不是可觀察的,所以您的計算不會更新。

你需要什麼用this.weeklyAmount()

this.monthlyAmount = ko.computed(function() { 
    var temp = this.weeklyAmount(); 
    return total = (Number(temp) * 4.4).toFixed(2); 
}, this); 

注意這使得this指向正確的對象inside your computed第二個參數this(如果你使用的不是self模式在你ViewModel

演示JSFiddle

+0

謝謝你,這是它 –