gpt4 book ai didi

ruby - 如何获取液体模板中引用的变量列表

转载 作者:行者123 更新时间:2023-12-03 14:34:37 26 4
gpt4 key购买 nike

我正在开发一个使用 Liquid 模板语言的项目。我有一个带有 iframe 的页面,显示了一些呈现的液体模板和一个编辑器部分。在编辑器部分,用户可以更改液体模板中引用的一些变量的值。此时需要重新渲染一些模板,但我只想重新渲染那些引用已更改变量的模板。

我坚持的一点是如何最好地获取液体模板中引用的变量列表。

所以如果我这样做:

templates=[]
templates[0] = Liquid::Template.parse("hi {{name}}")
templates[1] = Liquid::Template.parse("my cat is called {{cat_name}}")

我想知道 'name' 被引用,但(例如)'cat' 不在模板 0 中。然后当名称更改时,我可以重新渲染模板 [0],当 cat 更改时,我可以重新渲染模板 [ 1]。

我发现我可以获得一个节点列表并检查每个节点以查看它是否是一个变量,例如templates[0].root.nodelist[1] 的类型为 'Liquid::Variable' 但变量的 'name' 方法返回一个类型为 'Liquid::VariableLookup' 的对象,而后者似乎没有一种从中获取名称的方法,这感觉就像我可能会以错误的方式进行操作。

最佳答案

关注 https://github.com/Shopify/liquid/issues/685#issuecomment-471499796您可以使用 FileTreeVisitor类。即:

template = Liquid::Template.parse("hi {{name}}")

Liquid::ParseTreeVisitor.for(template.root)
.add_callback_for(Liquid::VariableLookup) do |node|
[node.name, *node.lookups].join('.')
end.visit.flatten.compact # => ["name"]

关于ruby - 如何获取液体模板中引用的变量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29696259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com