输出苗条到变量
Output slim to variable
我正在使用 Base64.encode64(val)
将 html 转换为 base64。
示例:
- val = link_to 'Link', link_path
= Base64.encode64(val)
但是我怎样才能得到变量的精简标记呢?像这样:
.class = link_to 'Link', link_path # <- this output with slim div
甚至多行
div
span
.another_div
有一种方法是将 slim 代码放入 partial 中并执行此操作:
- var = render 'partial'
= Base64.encode64(var) # Convert into base64
没有部分怎么办?
苗条exposes its templating through the Tilt interface,像这样:
# Render a template file:
Slim::Template.new("template.slim", options).render(scope)
# Render a string:
Slim::Template.new(options) { "b slim markup" }.render(scope)
其中 options 是 slim 的 options 的可选散列,scope 是模板代码所在的对象执行。
所以如下:
slim_markup = <<-SLIM
div
span
.another_div
SLIM
# The options hash and scope have been omitted for the sake of simplicity
html_output = Slim::Template.new { slim_markup }.render
将 html_output
的值设置为:
<div></div>
<span></span>
<div class="another_div"></div>
但是对于使用 url 助手 link_path 的示例,您必须提供 slim 范围,其中 url 助手可用例如控制器。
另一种方法是使用capture
方法。来自文档:
使用绑定,您可以捕获到局部变量,如下所示:
module Helpers
def capture_to_local(var, &block)
set_var = block.binding.eval("lambda {|x| #{var} = x }")
# In Rails we have to use capture!
# If we are using Slim without a framework (Plain Tilt),
# you can just yield to get the captured block.
set_var.call(defined?(::Rails) ? capture(&block) : yield)
end
end
然后可以在 Slim 模板中使用助手,如下所示
/ The captured_content variable must be known by the Binding beforehand.
= capture_to_local captured_content=:captured_content
p This will be captured in the variable captured_content
= captured_content
阅读更多https://github.com/slim-template/slim#capturing-to-local-variables
这是一个老问题,但我曾多次想过这个问题,而且我总是花很多时间研究它。
使用Slim 4可以直接使用capture
:
- val = capture
div
span
.another_div
这会将呈现的苗条放入您的变量中。
我正在使用 Base64.encode64(val)
将 html 转换为 base64。
示例:
- val = link_to 'Link', link_path
= Base64.encode64(val)
但是我怎样才能得到变量的精简标记呢?像这样:
.class = link_to 'Link', link_path # <- this output with slim div
甚至多行
div
span
.another_div
有一种方法是将 slim 代码放入 partial 中并执行此操作:
- var = render 'partial'
= Base64.encode64(var) # Convert into base64
没有部分怎么办?
苗条exposes its templating through the Tilt interface,像这样:
# Render a template file:
Slim::Template.new("template.slim", options).render(scope)
# Render a string:
Slim::Template.new(options) { "b slim markup" }.render(scope)
其中 options 是 slim 的 options 的可选散列,scope 是模板代码所在的对象执行。
所以如下:
slim_markup = <<-SLIM
div
span
.another_div
SLIM
# The options hash and scope have been omitted for the sake of simplicity
html_output = Slim::Template.new { slim_markup }.render
将 html_output
的值设置为:
<div></div>
<span></span>
<div class="another_div"></div>
但是对于使用 url 助手 link_path 的示例,您必须提供 slim 范围,其中 url 助手可用例如控制器。
另一种方法是使用capture
方法。来自文档:
使用绑定,您可以捕获到局部变量,如下所示:
module Helpers
def capture_to_local(var, &block)
set_var = block.binding.eval("lambda {|x| #{var} = x }")
# In Rails we have to use capture!
# If we are using Slim without a framework (Plain Tilt),
# you can just yield to get the captured block.
set_var.call(defined?(::Rails) ? capture(&block) : yield)
end
end
然后可以在 Slim 模板中使用助手,如下所示
/ The captured_content variable must be known by the Binding beforehand.
= capture_to_local captured_content=:captured_content
p This will be captured in the variable captured_content
= captured_content
阅读更多https://github.com/slim-template/slim#capturing-to-local-variables
这是一个老问题,但我曾多次想过这个问题,而且我总是花很多时间研究它。
使用Slim 4可以直接使用capture
:
- val = capture
div
span
.another_div
这会将呈现的苗条放入您的变量中。