2012-06-07 15 views
6

Ich erhalte Daten von einem WCF und binde es an eine Tabelle. Mir wurde in diesem Forum geholfen, einige Rechenfelder hinzuzufügen und alles funktioniert perfekt. Ich möchte eine Summe in der Fußzeile dieser Tabelle hinzufügen. eine einfache Version meiner Seite konnte bei http://jsfiddle.net/qeUHd/3/ gesehen werden. Im Grunde möchte ich lernen, wie man ein Feld zu meinem ViewModel hinzufügt, das das Ergebnis der Summe eines anderen Feldes in meinem Beispiel "Betrag" ist. Jede Hilfe würde sehr geschätzt werden. http://jsfiddle.net/qeUHd/3/knockout compute sum

Antwort

11

In Ihrer Geige ordnen Sie Ihren Datensatz auf self.model an, also ist self.model ein observableArray. Da dies der Fall war, musste ich nur eine computed value zusammenstellen, um Ihre Summe zu erhalten.

http://jsfiddle.net/qeUHd/5/

self.total = ko.computed(function(){ 
    var total = 0; 
    for(var p = 0; p < self.model().length; ++p) 
    { 
     total += self.model()[p].Amount(); 
    } 
    return total; 
}); 

Dann so stellen Sie sicher, um es zu binden.

<td data-bind="text: total"> 

Sie tun Dinge, die ein wenig nach hinten, aber ich nehme an, es auf die Art und Weise fällig Sie Ihre Daten sind empfangen, so dass ich damit umgegangen und ging weiter.

+0

Vielen Dank Ich fange an zu verstehen, knockout logisch dank dem tollen Team von Experten hier. –

1

Während ich diese Art von berechneten Feldern im Allgemeinen empfehlen und unterstützen würde (da dies normalerweise der Fall ist), gibt es Zeiten, in denen Sie mit Daten arbeiten, bei denen es schwierig ist, zusätzliche berechnete Eigenschaften hinzuzufügen. Ein Beispiel wäre, wenn Sie Ihre Daten in der Ansicht gruppieren. In diesem Fall könnten Sie die Gesamtsumme trotzdem anzeigen, aber die Berechnung in die Ansicht verschieben:

<td data-bind="text: $data.reduce(function(x,y) { return x + y.Amount(); }, 0)"></td>