Prestaul der reduce
Antwort ist eine gute Lösung, aber ich dachte, dass ich auch Ihnen ein wenig mehr Einblick zu geben beantworten würde, was passiert ist.
Das Problem ist, dass Variablen, die innerhalb einer each
-Schleife erstellt werden, außerhalb der Schleife nicht verfügbar sind. Der Code würde wie folgt in JavaScript aussehen:
bagItems.forEach(function(item) {
var total = total + item.realprice;
});
write("<p>" + total + "</p>");
Ich nehme an, Sie sind vertraut mit JS Variablen Scoping, aber im Grunde var
s innerhalb einer Funktion definiert sind nicht zugänglich außerhalb. Ein zweites Problem ist, dass Sie total als gleich zu sich selbst definieren + etwas anderes, aber Sie geben ihm nie einen Anfangswert, so würde es als undefined + item.realprice
enden, was NaN
ist.
Hier ist eine alternative Lösung, die diese beiden Probleme löst:
- var total = 0
each item in bagItems
- total += item.realprice
p= total
dumm von mir, die mehr Sinn macht: P – jamcoupe
@ Adam, ich stimme, dass im Allgemeinen Sie Datenmanipulation in Ihren Vorlagen vermeiden wollen, aber ich denke, Diese Display-bezogene Logik gehört in Vorlagen und nicht in Ihren Controllern genauso wie die Geschäftslogik nicht zu Ihren Vorlagen gehört. Ich denke, dies ist ein gutes Beispiel für einen Fall, in dem die Daten, die Sie für die Anzeige benötigen, bereits vorhanden sind (eine Summe ist keine Datenbearbeitung) und Ihr Controller keine Daten strukturieren muss, um zu berücksichtigen, wie Sie ihn jetzt anzeigen möchten. Der nächste Schritt sind Controller, die HTML-Klassennamen für Elemente generieren. – Prestaul
@adam, ich stimme zu, dass Geschäftslogik und Datenmanipulation nicht in Vorlagen gehören. Ich hoffe, es war klar, dass ich gesagt habe, dass es möglich ist, dieses Ideal zu weit zu bringen. Das logische Ende dieser Denkrichtung ist Moustache. Mir ist klar, dass es viele Puristen gibt, die denken, dass Moustache (Logiklose Vorlagen) die Verkörperung eines Ideals ist, aber ich glaube, dass viele Leute feststellen, dass Logik-lose Schablonen sie zwingen, Logik in andere Schablonen einzutragen. – Prestaul