3
var template = Mustache.compile("{{#list}}<option value=\"{{&0}}\">{{&0}}</option>{{/list}}");

var view = { list: ["1.0", "2.0"] };

var output = template(view);

上記のスニペットでは、HTMLに出力される数値は「プリティファイド」です。

"1.0" => 1
"2.0" => 2

これらの番号が受け取ったとおりに正確に印刷されることは、アプリケーションにとって重要です。リストに入る項目は、必ずしも数字であるとは限らず、小数点以下の桁数が同じであるとは限りません。

文字列として受信/処理された状態でそれらを強制的に印刷するにはどうすればよいですか?

注-unscapeタグ(&)も使用しました注-文字列として再宣言しようとしましたが、JSはレンダリング時に数値として解釈します。

var view = { list: [new String("1.0"), new String("2.0")] };
4

2 に答える 2

4

テンプレートが少しずれています。現在の要素を文字列として参照するには、{{0}}または{{&0}}の代わりに{{。}}を使用してみてください。

var template = Mustache.compile("{{#list}}<option value=\"{{.}}\">{{.}}</option>{{/list}}");

これがデモンストレーションするjsFiddleです:Fiddle

Mustacheの仕様に従って、{{。}}は反復で現在の要素を識別し、小数を文字列としてキャストする必要があります。あなたの場合、あなたは文字列から始めます、それは実際に0桁(1.0 === 1)で小数を保持するために必要です。

口ひげの仕様(〜157行目):sections.yml

代わりに{{0}}を使用することに慣れていませんが、動作が少し異なることは明らかです。使用法についてはスペックに何も見つかりませんでした。

試したエスケープは、HTMLを処理する場合にのみ必要です。

お役に立てば幸いです。

于 2013-03-07T14:42:22.780 に答える
2

{{0}}(または{{&0}}そのことについては)エンコーディングまたは変換の問題のために何か奇妙なことをしていません、あなたがそれを頼んだのでそれは奇妙なことをしています:)

Mustacheでは、ルックアップは最初に現在のスコープに対して試行され、次に親スコープに対して試行され、スタックの最後まで試行されます。

このデータを考えると:

{list: ["1.0", "2.0"]}

そしてこの口ひげテンプレート:

{{# list }}{{ 0 }}{{/ list }}

レンダリングコンテキストスタックは、次のように始まります。

[
  {list: ["1.0", "2.0"]}
]

ただし、その{{# list }}セクションに入るとすぐに、リストアイテムの反復が開始され、コンテキストスタックは次のようになります。

[
  {list: ["1.0", "2.0"]}, // same as before
  "1.0"                   // or, "2.0" in the second trip through the loop...
]

したがって、セクション内のタグは"1.0"最初のタグに対して試行され、それが失敗した場合は、に対して試行されます{list: ["1.0", "2.0"]}。だから本当に、あなた{{&0}}が意味した"1.0"[0]のは"2.0"[0]...

もちろん、これはとに評価され"1"ます"2"

于 2013-03-07T18:04:09.590 に答える