ruby Mustache.render没有像JS Mustache.render这样的partials的第三个参数

时间:2015-02-06 11:38:57

标签: javascript ruby-on-rails ruby mustache partials

我有一个将JSON发送到客户端的AJAX,因此它可以在客户端呈现一个Mustache模板。 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 Strongache中的,第三个参数不存在。我已经看过Mustache的来源并且我已经调试了它,它与&#34; context&#34;有关。 of Moustache,但无法弄清楚如何在JS版本的Mustache中传递PARTIAL。

我试过了:

Mustache.render( mytemplate, { data: myjson, partial: mypartial })

但它没有渲染myjson

1 个答案:

答案 0 :(得分:1)

在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实现有很好的文档记录,但主要是在源代码注释中。查看更多信息:)

https://github.com/mustache/mustache/blob/master/lib/mustache.rb#L6-L73