使用 Liquid 自定义标签输出多个 span 元素
Using Liquid custom tags to output multiple `span` elements`
我正在使用 Jekyll 插件及其创建自定义标签的能力,我 运行 遇到了扩展我的标签以接受逗号分隔列表的问题。
我从以下开始:
{% symbol R %}
以及匹配的插件代码:
module Jekyll
class Symbol < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
"<span class='symbol-#{@text}'>#{@text}</span>"
end
end
end
Liquid::Template.register_tag('symbol', Jekyll::Symbol)
我页面上的输出,正如预期的那样,是:
<span class="symbol-R">R</span>
我现在想做的是修改这个插件,这样我就可以传入一个逗号分隔的列表,例如:
{% symbol R,G %}
我将我的插件代码更新为:
module Jekyll
class Symbol < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
symbol = @text.split(',').map(&:strip)
symbol.each do |item|
puts item # to test in terminal
"<span class='symbol-#{@text}'>#{@text}</span>"
end
end
end
end
Liquid::Template.register_tag('symbol', Jekyll::Symbol)
终端输出正确:
R
G
我的期望是我的页面上会出现以下内容:
<span class="symbol-R">R</span><span class="symbol-G">G</span>
但是页面上显示的是:
RG
我能得到一些帮助来解决这个问题吗?我觉得我非常接近...这只是我明显搞砸了的实际页面呈现。
替换
symbol.each do |item|
puts item # to test in terminal
"<span class='symbol-#{@text}'>#{@text}</span>"
end
来自
output = ""
symbol.each do |item|
output =+ "<span class='symbol-#{item}'>#{item}</span>"
end
output
在 Ruby 中,您的函数将 return 它执行的最后一个表达式。对你来说,这就是 symbol.each do … end
.
each
returns various things, but what it does not do by itself is return the contents of its block. For that, you want map
:
symbol.map do |item|
puts item # to test in terminal
"<span class='symbol-#{@text}'>#{@text}</span>"
end
我正在使用 Jekyll 插件及其创建自定义标签的能力,我 运行 遇到了扩展我的标签以接受逗号分隔列表的问题。
我从以下开始:
{% symbol R %}
以及匹配的插件代码:
module Jekyll
class Symbol < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
"<span class='symbol-#{@text}'>#{@text}</span>"
end
end
end
Liquid::Template.register_tag('symbol', Jekyll::Symbol)
我页面上的输出,正如预期的那样,是:
<span class="symbol-R">R</span>
我现在想做的是修改这个插件,这样我就可以传入一个逗号分隔的列表,例如:
{% symbol R,G %}
我将我的插件代码更新为:
module Jekyll
class Symbol < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
symbol = @text.split(',').map(&:strip)
symbol.each do |item|
puts item # to test in terminal
"<span class='symbol-#{@text}'>#{@text}</span>"
end
end
end
end
Liquid::Template.register_tag('symbol', Jekyll::Symbol)
终端输出正确:
R
G
我的期望是我的页面上会出现以下内容:
<span class="symbol-R">R</span><span class="symbol-G">G</span>
但是页面上显示的是:
RG
我能得到一些帮助来解决这个问题吗?我觉得我非常接近...这只是我明显搞砸了的实际页面呈现。
替换
symbol.each do |item|
puts item # to test in terminal
"<span class='symbol-#{@text}'>#{@text}</span>"
end
来自
output = ""
symbol.each do |item|
output =+ "<span class='symbol-#{item}'>#{item}</span>"
end
output
在 Ruby 中,您的函数将 return 它执行的最后一个表达式。对你来说,这就是 symbol.each do … end
.
each
returns various things, but what it does not do by itself is return the contents of its block. For that, you want map
:
symbol.map do |item|
puts item # to test in terminal
"<span class='symbol-#{@text}'>#{@text}</span>"
end