如何解决在 ruby 中创建类似 Mustache Helpers (Lambda) 函数的 Javascript
我找不到任何文档或示例来创建 Mustache Lambda,它可以访问当前上下文并创建像 lambda 助手一样的 mustache js。
http://mustache.github.io/mustache.5.html
解决方法
在查看 Mustache 库代码后,我发现可以使用 context.current
访问当前上下文并使用它递归调用 render
方法。
这是实现它的方法。希望能帮到其他人。
class MustacheTemplateHelper < Mustache
self.raise_on_context_miss = true
def context
super
end
def self.render(expression,replacementContext = {})
new.render(expression,replacementContext)
end
def render(expression,replacementContext = {})
replacementContext = replacementContext.merge(self.class.helperMethod(context))
super
end
def self.helperMethod(context)
return lambdaMethods = Hash[
"ToYaml" => lambda do | expression |
# this statement renders the string part between ToYaml tags
renderedString = render(expression,context.current) # context.current contains current context
startIndentationSize = renderedString[/\A */].size
return JSON.parse(renderedString.gsub('=>',':').gsub(":nil,",":null,"))
.to_yaml().delete_prefix("---\n").indent(startIndentationSize)
end
]
end
模板:
{{#configs}}
- name: {{{name}}}
inputs:
{{#ToYaml}}
{{{parameters}}}
{{/ToYaml}}
{{/configs}}
示例配置:
{"configs"=>[{"name"=>"Test1","parameters"=>{"param1"=> "demo1","param2"=>"demo2"}},{"name"=>"Test2","parameters"=>{"param3"=> "demo3","param4"=>"demo4"}}]}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。