我有一个AJAX,可将JSON发送给客户端,因此它可以在客户端渲染Mustache模板。小胡子模板有一部分。一切顺利。我将从here
中借用示例示例11:局部(JS版本的小胡子)
var data = { depts: [
{ name: "Engineering",
employees: [
{firstName: "Christophe", lastName: "Coenraets"},
{firstName: "John", lastName: "Smith"}]
},
{ name: "Sales",
employees: [
{firstName: "Paula", lastName: "Taylor"},
{firstName: "Lisa", lastName: "Jones"}]
}]
};
var tpl = "{{#depts}}<h1>{{name}}</h1>" +
"<ul>{{#employees}}{{>employee}}{{/employees}}</ul>{{/depts}}";
var partials = {employee: "<li>{{firstName}} {{lastName}}</li>"};
var html = Mustache.render(tpl, data, partials);
$('#sampleArea').html(html);
您可以在对Mustache.render
的调用中看到,有一个第三个参数可以传递PARTIALS,在JS中效果很好。
我需要在Ruby中做完全相同的事情,但是问题是,在Ruby Mustache中,第三个参数不存在。我已经看到了Mustache的源代码并对其进行了调试,它与Mustache的“上下文”有关,但无法弄清楚如何像JS版本的Mustache中那样传递PARTIAL。
我尝试过:
Mustache.render( mytemplate, { data: myjson, partial: mypartial })
但它不会渲染myjson
在Ruby实现中,部分文件是由Mustache.partial
从文件系统加载的,默认情况下,该文件系统会在当前目录中检查名为mypartial.mustache
的文件。您可以通过为自己的特定需求将Mustache子类化来覆盖默认行为:
class MyMustache < Mustache
PARTIALS = {
employee: "<li>{{firstName}} {{lastName}}</li>"
}
def partial(name)
PARTIALS[name.to_sym]
end
end
puts MyMustache.render(tpl, data)
Ruby实现的文档非常丰富,但是大部分都在源注释中。签出更多信息:)