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
对于应用程序来说,这些数字与接收到的完全一样打印是很重要的。进入列表的项目可能并不总是数字或具有相同的小数位数。
我如何强制将它们打印为接收/处理为字符串?
注意 - 我还使用了 unescape 标签 (&) 注意 - 我已经尝试将它们重新声明为字符串,但 JS 在呈现时仍将它们解释为数字,即
var view = { list: [new String("1.0"), new String("2.0")] };
最佳答案
您的模板有点不对劲。尝试使用 {{.}} 而不是 {{0}} 或 {{&0}} 将当前元素作为字符串引用。
var template = Mustache.compile("{{#list}}<option value=\"{{.}}\">{{.}}</option>{{/list}}");
这是一个用于演示的 jsFiddle:Fiddle
根据 Mustache 规范,{{.}} 将标识迭代中的当前元素并且应该将小数转换为字符串。在您的情况下,您从字符串开始,这确实是保留小数位数为 0 (1.0 === 1) 所必需的。
mustache 规范(~第 157 行):sections.yml
我不熟悉使用 {{0}} 代替,但显然它的行为有点不同。我没有在规范中找到任何关于它的用法的信息。
您尝试的转义应该只在处理 HTML 时才有必要。
希望对您有所帮助!
关于javascript - 如何强制 Mustache 将数字呈现为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15273335/