Sre*_*tha 4 ruby recursion mustache
我试图渲染一个在其中引用自己的胡子模板.但它给出了"堆栈级太深"的错误.
这是我在ruby中的代码.
require 'mustache'
require 'active_support'
str = File.read("person.json")
j = ActiveSupport::JSON.decode(str)
Mustache.template_file = "person.mustache"
puts Mustache.render(j)
Run Code Online (Sandbox Code Playgroud)
{
"name":"Jason",
"rels":[
{"type":"friend",
"ref":{
"name":"John",
"rels":[
{"type":"friend",
"ref":{"name":"Chrissy"}}
]
}},
{"type":"family",
"ref":{"name":"Owen"}}
]
}
Run Code Online (Sandbox Code Playgroud)
{{#rels}}
<ul>
<li>Type: {{type}}</li>
{{#ref}} {{> person}} {{/ref}}
</ul>
{{/rels}}
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
从精细手册:
Partials
[...]
他们还继承了调用上下文.在再培训局,您可能有:Run Code Online (Sandbox Code Playgroud)<%= partial :next_more, :start => start, :size => size %>小胡子只需要这个:
Run Code Online (Sandbox Code Playgroud){{> next_more}}为什么?因为next_more.mustache文件将继承调用上下文的大小并启动方法.
所以,如果rels在当前上下文中没有:
"ref": { "name": "Chrissy" }
Run Code Online (Sandbox Code Playgroud)
然后你将继承rels父母.这会让你rels从父进程中进行部分引用,从而再次激活部分引用来自父进程的引用rels,直到你用完堆栈为止.
如果你要构建一个这样的递归模板:
{{#rels}}
<ul>
<li>Type: {{type}}</li>
{{#ref}} {{> person}} {{/ref}}
</ul>
{{/rels}}
Run Code Online (Sandbox Code Playgroud)
那么你需要在每个级别都有完整的对象:
{
"name":"Jason",
"rels":[
{"type":"friend",
"ref":{
"name":"John",
"rels":[
{"type":"friend",
"ref":{"name":"Chrissy","rels":[]}} // <--- rels here
]
}},
{"type":"family",
"ref":{"name":"Owen","rels":[]}} // <-------------- and here
]
}
Run Code Online (Sandbox Code Playgroud)
您可以在JSON中充实您的数据,或者在解析它之后,我建议您在解析它之后将其充实.
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |