You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Phlex组件能否实现多次yield?如何达成预期渲染效果?

解决Phlex组件多次执行yield的方案

直接多次调用yield无法实现预期效果,因为Phlex中块内容是即时渲染输出的,第一次yield就会把块里的内容全部输出,第二次yield不会重复渲染。要实现多次复用块内容,可以用Phlex提供的capture方法先把块内容捕获为可复用的片段,之后多次渲染这个片段即可。

修改后的组件代码:

class Component < Phlex::HTML
  def view_template
    # 先捕获块内容到变量
    content = capture { yield }
    
    div do
      # 第一次渲染捕获的内容
      content
      
      span { plain "component" }

      # 第二次渲染捕获的内容
      content
    end
  end
end

使用组件时,就能得到你期望的效果:

<%= Component.new do %>
  <div>foo</div>

  <!-- 在此渲染内容为"component"的span -->

  <div>bar</div>
<% end %>

原理说明

  • capture方法会执行传入的块,并把块内生成的HTML内容保存为一个Phlex::Fragment对象,这个对象可以被多次渲染。
  • 这种写法依然保持了组件调用时的块语法,不需要拆分内容为多个参数,符合你的需求。

内容的提问来源于stack exchange,提问作者Sebastián Palma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:04:49