0

我正在转换一些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)

返回“一些文本”,通常返回第二个和后续参数。


看起来,查看 actionview/helpers/tag_helper.rb,content_tag方法检查 block_given?而标签没有。

但是为什么yyyyyyyy(不是)我将不得不再次通读PR才能找到答案。

4

1 回答 1

0

我发现如果我这样做:

@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>

...这是所有的阳光和棒棒糖。

小精灵?人们只能想知道。

于 2019-08-21T03:35:11.307 回答