我有一个 AJAX,可以将 JSON 发送到客户端,因此它可以在客户端呈现 Mustache 模板。 Mustache 模板有一个部分。 一切都很顺利。我借用here中的例子
示例 11:部分(JS 版本的 Mustache)
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 实现的文档非常齐全,但大部分都在源代码注释中。查看更多信息:)
关于javascript - ruby Mustache.render 没有像 JS Mustache.render 这样的局部参数的第三个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364958/