私は買い物かごの合計を追加する必要がありますが、私はここでは、この使用ヒスイはヒスイのテンプレートエンジンを使用して合計を加算
を行う方法を知らないことは、私はそれを実装することができると思ったが、それは仕事をdoesntの方法です他の方法で私はただエラーを投げつけようとしました。
どのように私はこれを行うだろう知っていますか?
each item in bagItems
- var total = total + item.realprice
p= total
私は買い物かごの合計を追加する必要がありますが、私はここでは、この使用ヒスイはヒスイのテンプレートエンジンを使用して合計を加算
を行う方法を知らないことは、私はそれを実装することができると思ったが、それは仕事をdoesntの方法です他の方法で私はただエラーを投げつけようとしました。
どのように私はこれを行うだろう知っていますか?
each item in bagItems
- var total = total + item.realprice
p= total
あなたは、通常どのテンプレート言語でテンプレート内のデータを操作しません。あなたのアプリで合計を試し、その変数をテンプレートに渡します。
これは、配列のreduceメソッドを使うのはかなり簡単です。
p= bagItems.reduce(function(total, item) { return total + item.realprice; }, 0)
Prestaulのreduce
答えは、良い解決策ですが、私は、私はあなたに何が起こったかにもう少し洞察力を与えるためにもお答えしようと思いました。
ループの内部でeach
ループの内部で作成された変数は使用できません。あなたのコードは、JavaScriptで次のようになります。
bagItems.forEach(function(item) {
var total = total + item.realprice;
});
write("<p>" + total + "</p>");
を私はあなたがJSの変数のスコープに精通していると仮定しますが、基本的には、関数の内部で定義var
sが、それ以外はアクセスできません。
第2の問題は、合計値が他の値と同じであると定義していることですが、それに初期値を与えることはないため、undefined + item.realprice
の値はNaN
になります。
は、ここでこれらの問題の両方を解決する代替ソリューションです:
- var total = 0
each item in bagItems
- total += item.realprice
p= total
より理にかなって
愚かな私:P – jamcoupe
@adam、私は一般的に、あなたのテンプレートでデータ操作を避けたいことに同意しますが、私は考えますその表示関連ロジックはテンプレートに属し、ビジネスロジックがテンプレートに属さないのと同じ方法でコントローラには属しません。これは、表示に必要なデータがすでに存在している(データの操作ではない)場合の良い例だと思っています。コントローラは、今すぐ表示する方法に合わせてデータを構造化する必要はありません。次のステップは、要素のhtmlクラス名を生成するコントローラです。 – Prestaul
@adam、私はビジネスロジックとデータ操作がテンプレートに属していないことに同意します。私は、私が言っていることは、この理想をあまりにも遠くに取ることが可能であると考えていることが明らかであることを願っています。この考え方の論理的な終わりは、Mustacheです。 Mustache(ロジックレステンプレート)は理想的なものだと思う多くの純粋主義者がいることを認識していますが、多くの人がロジックレステンプレートを使用すると、テンプレートに属するロジックを他の場所に置くようになります。 – Prestaul