2017-02-05 4 views
1

Ich habe ein bisschen Code, an dem ich arbeite, das Teil einer größeren Budgetanwendung ist. Mit diesem Bit können einige wiederkehrende wöchentliche Ausgaben eingegeben werden, und die App berechnet monatliche Summen basierend auf der Eingabe. Alles funktioniert, außer der Aktualisierung des Monatsbetrags in der Tabelle beim Bearbeiten eines bestehenden Eintrags. Die Funktion löscht die monatlichen Gesamtkosten pro Woche und das Hinzufügen eines neuen Eintrags funktioniert genauso.KO Berechnete Variable wird nicht aktualisiert

Der wöchentliche Betrag in der Tabelle kommt von self.weeklyExpense = new weeklyExpense();. Dieses Objekt wird mit der folgenden externen Funktion erstellt.

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

ich das Problem verringert haben bis auf die this.monthlyAmount = ko.computed Variable, es wird nicht aktualisiert, wenn die monthlyAmount Änderungen. Ich habe im Debugger überprüft, dass sich die weeklyAmount ändert, aber die berechnete Variable wird nicht aktualisiert. Jede Hilfe würde sehr geschätzt werden.

Hier ist ein Link zu einem funktionierenden JS Fiddle Beispiel.

Antwort

2

Sie verweisen auf die falsche Eigenschaft: data.weeklyAmount ist keine Observable, so dass Ihr Computer nicht aktualisiert wird.

Was Sie verwenden müssen, ist die this.weeklyAmount():

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

Hinweis der zweite Parameter this die die this auf die richtige Objekt macht inside your computed (wenn Sie nicht das self Muster verwenden wie in Ihrem ViewModel)

Demo JSFiddle.

+0

Danke das war es –

Verwandte Themen