суммирование с использованием движка шаблонов Jade - PullRequest
2 голосов
/ 02 апреля 2012

Мне нужно сложить итог для корзины покупок, но я не знаю, как это сделать с помощью Jade

Вот как я думал, что смогу это реализовать, но это не работает, другие способы, которые я пробовал, просто продолжать выдавать ошибки.

Кто-нибудь знает, как я это сделаю?

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

Ответы [ 3 ]

6 голосов
/ 03 апреля 2012

Это должно быть довольно легко сделать с помощью метода Reduce в вашем массиве.

p= bagItems.reduce(function(total, item) { return total + item.realprice; }, 0)
3 голосов
/ 03 апреля 2012

Ответ Престола reduce является хорошим решением, но я подумал, что отвечу также, чтобы дать вам немного больше понимания того, что произошло.

Проблема в том, что переменные, созданные внутри цикла each, недоступны вне цикла. Ваш код будет выглядеть так в JavaScript:

bagItems.forEach(function(item) {
    var total = total + item.realprice;
});
write("<p>" + total + "</p>");

Полагаю, вы знакомы с областью видимости переменных JS, но в основном var, определенные внутри функции, недоступны за ее пределами.

Вторая проблема заключается в том, что вы определяете общее как равное себе + чему-то еще, но вы никогда не даете ему начальное значение, поэтому оно в конечном итоге будет иметь вид undefined + item.realprice, равный NaN.

Вот альтернативное решение, которое решает обе эти проблемы:

- var total = 0
each item in bagItems
    - total += item.realprice
p= total
0 голосов
/ 02 апреля 2012

Обычно вы не можете манипулировать данными в шаблоне на любом языке шаблонов. Вычислите сумму в вашем приложении и передайте переменную в шаблон.

...