2012-04-02 3 views
2

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

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

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

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

ответ

-4

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

+0

глупо мне, что имеет смысл: P – jamcoupe

+1

@adam, я согласен, что в целом вы хотите, чтобы избежать манипуляций с данными в шаблонах, но я думаю, что связанная с отображением логика принадлежит шаблонам, а не вашим контроллерам, так же, как бизнес-логика не принадлежит вашим шаблонам. Я думаю, что это хороший пример того случая, когда данные, необходимые для отображения, уже существуют (сумма не является манипуляцией с данными), и вашему контроллеру не нужно структурировать данные, чтобы разместить то, как вы хотите отображать его сейчас. Следующий шаг - это контроллеры, генерирующие имена классов html для элементов. – Prestaul

+0

@adam, я согласен, что бизнес-логика и манипуляция данными не входят в шаблоны. Надеюсь, было ясно, что я говорил, что я думаю, что этот идеал можно считать слишком далеко. Логическим завершением этой линии мыслей является Усы. Я понимаю, что есть много пуристов, которые считают, что Mustache (без логических шаблонов) является воплощением идеала, но я считаю, что многие люди считают, что шаблоны без логики фактически заставляют их ставить логику, которая принадлежит шаблонам в другом месте. – Prestaul

6

Это довольно легко сделать, используя метод уменьшения в вашем массиве. reduce ответ

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

Prestaul является хорошим решением, но я думал, что ответить и дать вам немного больше понимания того, что произошло.

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

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

Я предполагаю, что вы знакомы с переменной обзорного JS, но в основном var s, определенные внутри функции не доступны за ее пределами.

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

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

- var total = 0 
each item in bagItems 
    - total += item.realprice 
p= total 
Смежные вопросы