Rails 5 个标签助手,标签名称在变量中
Rails 5 tag helper with tag name in variable
我正在转换一些使用 content_tag
的旧代码,如下所示:
wrap_tag = 'p'
....
content_tag(wrap_tag, class: 'etc') do
'some content'
end
生成预期的
<p class="etc">
Some content
</div>
我现在想更新为使用 tag
语法,但我遇到了问题:
wrap_tag = 'p'
...
tag wrap_tag, class: 'etc' do
'some content'
end
尝试:
tag.wrap_tag
给出 "<wrap-tag>some content</wrap-tag>"
不出意料,只是下划线变成了连字符。
其他变化:
- 直接使用
tag.p
:<p>some content</p>
- 使用
tag.wrap_tag
:<wrap-tag>some content</wrap-tag>
- 使用
tag.wrap_tag.to_sym
:<wrap-tag></wrap-tag>
- 使用
tag wrap_tag
:<p />
- 使用
tag wrap_tag.to_sym
:<p />
注意:以上所有示例都包含最初显示的 do..content..end
块。
有没有办法在变量中包含标签名称并包含内容?
谢谢
尝试 jvillian 的建议使用 send
我发现
wrap_tag = 'p'
content = 'some text'
helper.tag.send(wrap_tag, content)
returns "some text",通常 returns 第二个和后续参数。
看起来 actionview/helpers/tag_helper.rb,content_tag 方法确实检查了 block_given?而 tag 没有。
但是为什么yyyyyyyy(不是)
我将不得不再次通读 PR 以找出答案。
我发现如果我这样做:
@arg = :div
tag.send @arg, class: 'etc' do
'some content'
end
...然后我得到:
<div class="etc">some content</div>
同样,如果我这样做:
@arg = :section
tag.send @arg, class: 'etc' do
'some content'
end
...然后我得到:
<section class="etc">some content</section>
但是,如果我这样做:
@arg = :p
tag.send @arg, class: 'etc' do
'some content'
end
...然后我得到:
{:class=>"etc"}
这显然不是人们所期望的。而且,看起来很奇怪,因为:
tag.p class: 'etc' do
'some content'
end
...给出:
<p class="etc">some content</p>
...全是阳光和棒棒糖。
小精灵?只能想一想了。
我正在转换一些使用 content_tag
的旧代码,如下所示:
wrap_tag = 'p'
....
content_tag(wrap_tag, class: 'etc') do
'some content'
end
生成预期的
<p class="etc">
Some content
</div>
我现在想更新为使用 tag
语法,但我遇到了问题:
wrap_tag = 'p'
...
tag wrap_tag, class: 'etc' do
'some content'
end
尝试:
tag.wrap_tag
给出 "<wrap-tag>some content</wrap-tag>"
不出意料,只是下划线变成了连字符。
其他变化:
- 直接使用
tag.p
:<p>some content</p>
- 使用
tag.wrap_tag
:<wrap-tag>some content</wrap-tag>
- 使用
tag.wrap_tag.to_sym
:<wrap-tag></wrap-tag>
- 使用
tag wrap_tag
:<p />
- 使用
tag wrap_tag.to_sym
:<p />
注意:以上所有示例都包含最初显示的 do..content..end
块。
有没有办法在变量中包含标签名称并包含内容?
谢谢
尝试 jvillian 的建议使用 send
我发现
wrap_tag = 'p'
content = 'some text'
helper.tag.send(wrap_tag, content)
returns "some text",通常 returns 第二个和后续参数。
看起来 actionview/helpers/tag_helper.rb,content_tag 方法确实检查了 block_given?而 tag 没有。
但是为什么yyyyyyyy(不是) 我将不得不再次通读 PR 以找出答案。
我发现如果我这样做:
@arg = :div
tag.send @arg, class: 'etc' do
'some content'
end
...然后我得到:
<div class="etc">some content</div>
同样,如果我这样做:
@arg = :section
tag.send @arg, class: 'etc' do
'some content'
end
...然后我得到:
<section class="etc">some content</section>
但是,如果我这样做:
@arg = :p
tag.send @arg, class: 'etc' do
'some content'
end
...然后我得到:
{:class=>"etc"}
这显然不是人们所期望的。而且,看起来很奇怪,因为:
tag.p class: 'etc' do
'some content'
end
...给出:
<p class="etc">some content</p>
...全是阳光和棒棒糖。
小精灵?只能想一想了。