ruby Mustache.render没有针对JS Mustache.render之类的局部对象的第3个参数

问题描述 投票:0回答:1

我有一个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

javascript ruby-on-rails ruby mustache partials
1个回答
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实现的文档非常丰富,但是大部分都在源注释中。签出更多信息:)

Source

© www.soinside.com 2019 - 2024. All rights reserved.