如何使turbo_frame_tag加载turbo_stream格式而非默认HTML?
解决方法
要让turbo_frame_tag在页面加载时请求turbo_stream格式,无需依赖额外JavaScript,只需在生成src路径时显式指定格式即可:
<%= turbo_frame_tag dom_id(@item, "loader_helper"), src: home_index_path(@item, format: :turbo_stream) %>
这样生成的请求URL会带上.turbo_stream后缀(或format=turbo_stream参数,取决于你的路由配置),服务器端会自动识别为TURBO_STREAM格式,匹配控制器中format.turbo_stream的处理分支。
验证效果
发起的请求日志会变为:
Started GET "/home/1.turbo_stream" for ::1 at 2023-01-23 16:10:39 +0300 Processing by HomeController#index as TURBO_STREAM
控制器中的respond_to分支可正常处理该请求:
def index respond_to do |format| format.html format.turbo_stream end end
这并非Turbo的设计限制,只是默认情况下turbo_frame的请求会采用HTML格式,通过显式指定URL中的格式参数就能切换为turbo_stream请求,全程无需依赖JavaScript触发。
内容的提问来源于stack exchange,提问作者zhisme
相关产品推荐
相关产品推荐

