2012-04-02 7 views
2

Ich brauche insgesamt für einen Einkaufskorb zuzufügen, aber ich weiß nicht, wie dies mit Jade zu tunHinzufügen insgesamt mit Jade Template-Engine bis

Hier ist, wie ich dachte, dass ich es umsetzen konnte, aber es funktioniert nicht, Andere Möglichkeiten, die ich versucht habe, werfen einfach Fehler.

Weiß jemand wie ich das machen würde?

each item in bagItems 
    - var total = total + item.realprice 
p= total 

Antwort

-4

Sie würden nicht normalerweise Daten in einer Vorlage manipulieren in jede Template-Sprache. Berechnen Sie die Summe in Ihrer App und übergeben Sie die Variable an Ihre Vorlage.

+0

dumm von mir, die mehr Sinn macht: P – jamcoupe

+1

@ 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

+0

@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

6

Dies sollte ziemlich einfach mit der Reduce-Methode auf Ihrem Array zu tun sein.

p= bagItems.reduce(function(total, item) { return total + item.realprice; }, 0) 
3

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